最近在学习guava,写这篇文章主要是为了巩固下学习的东西。
资料地址:https://code.google.com/p/guava-libraries/wiki/PreconditionsExplained
?
?(1)Optional ?标识可以为空的对象。
?
? ?static <T> Optional<T> absent() 返回事实上的空对象。
? ?static <T> Optional<T> of(T reference) 构造一个Optional对象。注意T不能为null,否则将抛异常。
? ?static <T> Iterable<T> presentInstances(Iterable<? extends Optional<? extends T>> optionals) 从一个Iterable构造另一个Iterable,除去空对象(isPresent()=true)
?
? ?abstract boolean isPresent() 返回是否为空。
? ?abstract T get() 返回存储的对象。
? ?abstract Set<T> asSet() 返回一个集合,仅包含存储的对象一个元素,如果为空的话就是空集合。
? ?abstract Optional<T>or(Optional<? extends T> secondChoice)返回对象,如果为空就返回secondChoice。
? ?abstract T or(Supplier<? extends T> supplier) 返回对象,如果为空就返回supplier.get()返回的对象;Supplier是个很简单的接口,只有get()一个方法;这样的话各种实现该接口的对象都可以提供Optional的默认值。
? ?abstract T or(T defaultValue)返回对象,为空则返回defaultValue
? ?abstract T orNull() 返回对象,为空则返回null
? ?abstract <V> Optional<V> transform(Function<? super T,V> function) 将Optional对象转化为V对象
? ?
? ?equals,hashcode,tostring就不说了。
?
?
??
?(2)Preconditions 断言, 这个用的比较多。一般用于校验方法传入的参数是否满足心理预期。
?
? checkArgument(i >= 0, "Argument was %s but expected nonnegative", i);
? checkArgument(i < j, "Expected i < j, but %s > %s", i, j);
?
? 主要的方法有:
? checkArgument(boolean)
? checkNotNull(T)
? checkState(boolean)
? checkElementIndex(int index, int size)
? checkPositionIndex(int index, int size)
? checkPositionIndexes(int start, int end, int size)
?
?
? (3)Ordering 对集合进行排序,是guava对comparators的优化,实现了接口Comparator<T>,支持标准的链式操作。
static Ordering<Object>allEqual() ?返回的排序策略认为所有对象都是相等的,包括null。
Ordering.allEqual().nullsLast().sortedCopy(asList(t, null, e, s, null, t, null)) 将把null往后放,其他的维持原顺序。
?
static Ordering<Object>arbitrary() 跟Comparator类似,这种排序方式下,看compare方法返回的结果。
?
static <T> Ordering<T>compound(Iterable<? extends Comparator<? super T>> comparators)
static <T> Ordering<T>explicit(List<T> valuesInOrder)
static <T> Ordering<T>explicit(T leastValue, T... remainingValuesInOrder)
static <T> Ordering<T>from(Comparator<T> comparator)
static <C extends Comparable> Ordering<C>natural()
static Ordering<Object>usingToString()