【三方包系列】apache-common-lang

作者: 纳达丶无忌 | 来源:发表于2016-05-20 09:56 被阅读586次

    使用第三方包的目的:

    • 让代码有更好的可读性,比如
    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)
    
    

    相关文章

      网友评论

        本文标题:【三方包系列】apache-common-lang

        本文链接:https://www.haomeiwen.com/subject/zwxnrttx.html