文章目录
1、Optional–使用和避免null
Guava用Optional表示可能为null的T类型引用。
eg:
Optional<Integer> possible = Optional.of(5);
1.1创建Optional
//1.创建指定引用的Optional实例,若引用为null则快速失败
Optional.of(T);
//2.创建引用缺失的Optional实例
Optional.absent();
//3.创建指定引用的Optional实例,若引用为null则表示缺失
Optional.fromNullable(T);
1.2使用Optional实例查询
//1.如果Optional包含非null的引用,返回true
boolean isPresent();
//2.返回Optional所包含的引用,若引用缺失,则抛出java.lang.IllegalStateException
T get();
//3.返回Optional所包含的引用,若引用缺失,返回指定的值
T or(T);
//4.返回Optional所包含的引用,若引用缺失,返回null
T orNull();
2、Preconditions–前置条件
前置条件:让方法调用的前置条件判断更简单。Guava在Preconditions类中提供了若干前置条件判断的实用方法,不符合则抛出异常
//1.检查boolean是否为true,用来检查传递给方法的参数。
checkArgument(boolean);
//2.检查value是否为null,该方法直接返回value,因此可以内嵌使用checkNotNull。
checkNotNull(T);
//3.用来检查对象的某些状态。
checkState(boolean);
//4.检查index作为索引值对某个列表、字符串或数组是否有效。index>=0 && index<size *
checkElementIndex(int index, int size);
//5.检查index作为位置值对某个列表、字符串或数组是否有效。index>=0 && index<=size *
checkPositionIndex(int index, int size);
//6.检查[start, end]表示的位置范围对某个列表、字符串或数组是否有效*
checkPositionIndexes(int start, int end, int size);
3、Objects–进阶的Object方法
//1.equal--不会抛NullPointerException异常
Objects.equal("a", "a");
Objects.equal(null, null);
//2.hashCode--会对传入的字段序列计算出合理的、顺序敏感的散列值(自动)
Objects.hashCode(Object...);
/*3.ComparisonChain--进阶的比较器
ComparisonChain执行一种懒比较:它执行比较操作直至发现非零的结果,在那之后的比较输入将被忽略。*/
public int compareTo(Foo that) {
return ComparisonChain.start()
.compare(this.aString, that.aString)
.compare(this.anInt, that.anInt)
.compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
.result();
}
4.Ordering–排序器
排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能。
4.1创建排序器
//1.对可排序类型做自然排序
natural();
//2.按对象的字符串形式做字典排序
usingToString();
//3.把给定的Comparator转化为排序器
from(Comparator);
4.2其他排序器
链式调用方法:通过链式调用,可以由给定的排序器衍生出其它排序器
//1.获取语义相反的排序器
reverse();
//2.使用当前排序器,但额外把null值排到最前面。
nullsFirst();
//3.使用当前排序器,但额外把null值排到最后面。
nullsLast();
//4.合成另一个比较器,以处理当前排序器中的相等情况。
compound(Comparator);
//5.基于处理类型T的排序器,返回该类型的可迭代对象Iterable<T>的排序器。
lexicographical();
//6.对集合中元素调用Function,再按返回值用当前排序器排序。
onResultOf(Function);
4.3使用排序器
//1.获取可迭代对象中最大的k个元素,并按从大到小排序,返回一个集合
greatestOf();
//2.获取最小的几个,并按从小到大排序
leastOf();
//3.返回集合的一个排好序的副本
sortedCopy(list);
//4.返回不可变的排序副本
immutableSortedCopy(list);
//5.判断是否已经按排序器有序,元素不能少于2,允许有相等元素
isOrdered();
//6.是否严格排序,不允许有相等元素
isStrictlyOrdered();
//7.返回最大值
max();
//8.返回最小值
min();
5、Throwables–简化异常和错误的传播与检查
/*如果Throwable是Error或RuntimeException,直接抛出;
否则把Throwable包装成RuntimeException抛出。
返回类型是RuntimeException,所以你可以像上面说的那样写成throw Throwables.propagate(t),Java编译器会意识到这行代码保证抛出异常。
*/
RuntimeException propagate(Throwable);
/*Throwable类型为X才抛出*/
void propagateIfInstanceOf( Throwable, Class<X extends Exception>) throws X;
/*Throwable类型为Error或RuntimeException才抛出*/
void propagateIfPossible( Throwable);
/*Throwable类型为X, Error或RuntimeException才抛出*/
void propagateIfPossible( Throwable, Class<X extends Throwable>) throws X;