本节主要包含的内容为基础工具库的使用。
为什么学习Guava?
Guava是Google的一套基础类库,学习它除了提高开发效率外,其它就是提升逼格了。
Using/avoiding null
在Guava中有一个Optional抽象类,它和Jdk提供的功能差不多,用来避免使用null对象,jdk8中的Optional是不是从Guava抄来的?如果使用8以下版本的jdk,Guava倒也是一个选择。
上述图列出了Guava Optional class中包含的方法,大致上也分为了3类和jdk的一样,这里不做过多的赘述。
Preconditions
这是Guava提供的一组类似断言的前置检查工具方法。
这些方法Guava强烈建议我们静态倒入。
1 | import static com.google.common.base.Preconditions.*; |
下图列出了方法名说明等,我把他们分为2类,一个是对值的校验,另一个是对数组位置的校验。
Ordering
Ordering本身实现了比较器接口,所以可以结合Java的Collections类进行快速排序。主要使用场景用来快速构建较为复杂的排序逻辑,在Java8之后Comparator类新增了一些方法,也可以支持构建多级排序规则。
1 | public abstract class Ordering<T> implements Comparator<T> |
创建
natural()
对可排序的类型做自然排序
1
2List<Integer> list = Arrays.asList(1, 5, 3, 8, 2);
Collections.sort(list, Ordering.natural());
usingToString()
按对象的字符串形式进行字典排序
Ordering.from(Comparator)
使用预先的比较器进行构建
比较器链
这个才是Ordering比较强的地方,可以由给定的比较器组合出其它的比较器,,可以做到多字段排序,更多详细的示例在参考中有描述
应用
Ordering同时也提供了一组方法,可以用来直接操作集合,直接操作集合。
对比Java8的Comparator
我觉得Guava Ordering最强的地方就是链式的组合多个比较器,从而可以做到多字段的比较,在Java8的Comparator对象中新增了
1 | default Comparator<T> thenComparing(Comparator<? super T> other) |
同样也可以实现用多个字段比较。
Object methods
Object的方法主要有4个
equals
用来判断2个对象是否相等,需要注意的是jdk util包中也有一个Objects对象,里面的euqals方法和这个是等效的
1 | Objects.equal(null, "a"); // returns false |
hashCode
Guava的Objects.hashCode(Object...)
提供了一个比较实用的为一组对象生成HashCode
toString
也是一个比较好用的方法
1 | System.out.println(MoreObjects.toStringHelper(this).add("i", i).toString()); |
compare/compareTo
这个也挺有意思的,使用ComparisonChain
对象创建一个多级比较,更多的介绍看文档
Throwables
Throwables类的使用场景我还没想好,我觉得并不是一个必须使用的,文档上给了这么个示例
1 | try { |
上述代码中,标记1表示捕捉并处理了我们已知的异常,2和3表示如果捕捉的异常是IOException和SQLException则抛出这两个异常,4再抛出异常t
这一块我也不是很理解