使用第三方包的目的:
- 让代码有更好的可读性,比如
if(StringUtils.isEmpty(parameter))
的可读性优于
if(parameter == null || parameter=="")
- 不必重复写基本的判断逻辑,让自己关注真正的业务
apache-common是开源第三方Java组件中最常用的系列,其中包括了大量jar包。其中apache-common-lang是最核心与基础的jar包,lang代表language,意为对Java语言的补充。例如其中一个重要的原则就是null兼容,因为Java中对null的处理并不优雅,程序员一不小心就会抛出NullPointerException(这一点在同为JVM语言的Groovy中就大大不同)。所以在写程序的时候尽量使用apache-common组件提供的工具代码。
正因为它是基础,将它命名为『云南白药』,意为行走江湖必备。
ArrayUtils
int[] intArray = { 1, 2, 3, 3 };
//数组转换成字符串
System.out.println("intArray: " + ArrayUtils.toString(intArray));
//在一个数组中查找某个元素
System.out.println("intArray contains '8'? "
+ ArrayUtils.contains(intArray, 8));
System.out.println("intArray index of '8'? "
+ ArrayUtils.indexOf(intArray, 8));
System.out.println("intArray last index of '8'? "
+ ArrayUtils.lastIndexOf(intArray, 8));
//原始类型转换成包装类
Integer[] integerArray = ArrayUtils.toObject(intArray);
StringUtils
- 语义化判断
//判断是否为null和””
StringUtils.isEmpty(“”)
//在前者基础上,” “字符串也返回true
StringUtils.isBlank(“”)
StringUtils.isBlank(null)
//和前者相反,在代码中使用更加语义化,容易理解
StringUtils.isNotBlank(str)
//不要再使用Integer.parseInt()方法并在异常拦截块中做判断了
StringUtils.isNumeric(str5)
//两者是否相等,省略了null判断的过程
StringUtils.equals(str1,str2)
- 日志打印
//实现=======的效果,用于打日志
StringUtils.repeat("=", 50);
//实现 %%%%%%%%Customised Header%%%%%%%%效果
String msg = StringUtils.center(" Customised Header ", 50, "%");
- String与数组转化
//将一个array中的String连接起来,用分隔符隔开
StringUtils.join(array, ",");
//相反,把用分隔符隔开的string转为数组
StringUtils.split(string, ",");
- 可读性
//加强代码可读性,减少if判断
StringUtils.defaultString(String str, String defaultValue)
//缩写一个长string,若不足则不干任何事,否则截断并在末尾添加”…”
StringUtils.abbreviate(str,5)
ObjectUtils
针对所有类都可以使用的工具类,常用方法:
//可以方便的打印各种嵌套复杂类,集合类中所有的值,不必自己去实现toString()方法,可以用来在日志中输出。
ObjectUtils.toString()
//增强代码可读性,如果obj为null返回defaultObj,这一点在common-lang包中一脉相承
ObjectUtils.defaultIfNull(obj,defaultObj)
//是否相等,等价于obj.equals(obj2),省略了null判断
ObjectUtils.equals(obj,obj2)
反射相关:
- ClassUtils
- MethodUtils
- MemberUtils
- FieldUtils
//调用目标方法
MethodUtils.invokeMethod(obj,”sayHello”,null)
//得到目标类的field,
Field field = FieldUtils.getField(clazz,”name”)
//然后通过Field方法得到值
field.getString(obj)
Validate
类似于单元测试时的Assert,经常用于方法块第一部检查入参是否合理,若不合理则不必执行逻辑部分。
Validate.isTrue(expression)
Validate.notNull(obj)
不常用,做了解:
RandomStringUtils
简单实现了一些随机字符串的功能,比较粗糙
SerializationUtils
封装了类序列化的功能,与直接写区别不大
StringEscapeUtils
转义工具
SystemUtils
提供操作系统,jdk版本等信息,目测一般用不上
WordUtils
//转为每个单词首字母大写
WordUtils.capitalize(str)
//将str中的大小写互相转换
WordUtils.swapCase(str)