使用commons-lang的基本原则上就是要明折哪些类新版本的JDK中已经有相似的功能,而哪些类还不能由JDK替代,虽然本着尽量使用新版API的原则,但的确有些类是不能由新版API替代的。其中有一些类很有用处,下面将重点介绍本人认为很有用而且新版API不能替代的工具类。
Validate :这个类可能是最简单的了,但是这种思想是很值得学习的。在写方法的时候经常会遇见验证对象是否为空的问题,这样可以增加程序的可调试性。如:
public static void escapeHtml(Writer writer, String string) throws IOException {
if (writer == null ) {
throw new IllegalArgumentException ("The Writer must not be null.");
}
if (string == null) {
return;
}
.........................
大多数方法头部都应该包含基本的验证。如果使用Validate类,程序的结构将更加的优雅:
public static void escapeHtml(Writer writer, String string) throws IOException {
Validate.notNull(writer,"The Writer must not be null.");
if (string == null) {
return;
}
.........................
虽然Validate类本身很简单,但通过封装,这个类有相当大的实用价值。
StringEscapeUtils:这个类的主要作用就是对java,XML,javascript,HTML与XML的特殊字符进行转码。如果自己手动实现这些功能的确有些费劲,但是在很多情况下,为了系统更加安全与健壮,不得不对它们进行转码处理,否则会出现一些意想不到的事。比如SQL注入攻击就是这么来的。
这个类主要有两种风格的方法escapeXXX与unescapeXXX方法,分别对对象进行转码与解码。
这个类帮助程序员省了很多事,如果一开始的时候并没注意这些问题的话,在遭遇特殊字符的时候系统很可能会出现问题,如果不借助这些工具类,手动去实现会非常的麻烦。因此这个类也是很有价值的。
还有一个比较常用的类,就是字符串的工具类StringUtils,这个类方法非常的多,整个源代码也有近六千行,几乎包括了所有的字符串常用功能。使用时也要仔细参看文档,大多数时候,commons的处理方式会比JDK内部处理方式更加全面周到,特别是对null的处理。如
String有length方法,然而StringUtils也有length方法,看似一样,唯一的区别在于它们对null的处理不一样,前者会抛出一个异常,而后者会返回0。
大多数常用功能都可以在StringUtils中找到,如果遇见关于字符串的处理,首先想到的就应该是StringUtils类,像
str == null || str.length() == 0;
这样的代码完全可以通过StringUtils.isEmpty(str)来取代,程序会显得更加的优雅。
ObjectUtils:这个类比较简单,有一些方法也很实用,因为这些方法本身非常的简单,很多时候程序员在开发程序的时候就忽略它们的重用性。
个人比较喜欢那个
defaultIfNull(java.lang.Object object, java.lang.Object defaultValue)
记得原来经常用
if(s == null)
s = ""
其它这些都是可重用的规则,还有max,min,equal,toString,hashCode等方法,它们都对null经过友好的处理,可以放心使用,比起JDK自带的方法,的确要省心一些。