[Google Guava札记](三)base
2.14 FinalizableSoftReference<T>: 抽象类,只有构造函数。 继承了 SoftReference<T>类,实现了 FinalizableReference接口,是有 finalizeReferent()方法的软引用。
2.15 FinalizableWeakReference<T>: 抽象类,只有构造函数。 继承了 WeakReference<T>类,实现了 FinalizableReference接口,是有 finalizeReferent()方法的弱引用。
2.16 FinalizablePhantomReference<T>: 抽象类,只有构造函数。 继承了 PhantomReference<T>类,实现了 FinalizableReference接口,是有 finalizeReferent()方法的虚引用。
2.17 FinalizableReferenceQueue :引用队列,引用出列时,它的 finalizeReferent() 方法将会被调用。
以下关于Reference的相关知识引自: http://www.blogjava.net/mlzry0612/articles/349967.html,在此对 daniel表示感谢!
SoftReference
类
SoftReference
类的一个典型用途就是用于内存敏感的高速缓存。
SoftReference
的原理是:在保持对对象的引用时保证
在
JVM
报告内存不足情况之前将清除所有的软引用。关键之处在于,垃圾收集器在运行时可能会(也可能不会)释放软可及对象。对象是否被释放取决于垃圾
收集器的算法以及垃圾收集器运行时可用的内存数量。
WeakReference
类
WeakReference
类的一个典型用途就是规范化映射(
canonicalized mapping
)。另外,对于那些生存期相对较长而且重新创
建的开销也不高的对象来说,弱引用也比较有用。关键之处在于,垃圾收集器运行时如果碰到了弱可及对象,将释放
WeakReference
引用的对象。
然而,请注意,垃圾收集器可能要运行多次才能找到并释放弱可及对象。
PhantomReference
类
PhantomReference
类只能用于跟踪对被引用对象即将进行的收集。同样,它还能用于执行
pre-mortem
清除操作。
PhantomReference
必须与
ReferenceQueue
类一起使用。需要
ReferenceQueue
是因为它能够充当通知机
制。当垃圾收集器确定了某个对象是虚可及对象时,
PhantomReference
对象就被放在它的
ReferenceQueue
上。将
PhantomReference
对象放在
ReferenceQueue
上也就是一个通知,表明
PhantomReference
对象引用
的对象已经结束,可供收集了。这使您能够刚好在对象占用的内存被回收之前采取行动。
2.18 Functions :提供了与 Function 的实例相关的静态的实用工具方法。
静态方法:
toStringFunction() :返回 Function<Object, String> ,该 Function 的 apply(Object o) 方法调用了参数 o 的 toString() 方法。 apply(Object o) 的参数 o 如果为 null ,会抛出异常。
identity() :返回 Function<E, E> ,该 Function 的 apply(Object o) 方法直接返回参数 o 。
forMap(Map<K, V> map) :返回 Function<K, V> ,该 Function 的 apply(K key) 方法在 map 中查找键值为参数 key 的 value ,并返回 value ,如果 key 不在 map 中会抛出异常。
forMap(Map<K, ? extends V> map , @Nullable V defaultValue) :与上面的方法类似,但是如果 apply() 方法的参数 key 不在 map 中,会返回 defaultValue 。
compose(Function<B, C> g, Function<A, ? extends B> f) :返回 Function<A, C> ,该 Function 定义的方法是方法 g 和方法 f 的组合,对于输入参数,先对其调用方法 f ,然后对结果调用方法 g 。
forPredicate(Predicate<T> predicate) :返回 Function<T, Boolean> ,将一个 Predicate 转换为 Function ,该 Function 返回值与 Predicate 相同。
constant(@Nullable E value) :返回 Function<Object, E> ,该 Function 返回常量 value 。
2.19 Joiner:将文本片段连结起来。
静态方法:
on(String/char separator):返回一个以 separator为分隔的 Joiner。
成员方法:
appendTo(A appendable, Iterable<?> parts):返回 A,将 parts中的元素的字符串表示添加到 appendable中。
join(Iterable<?> parts):返回字符串。
useForNull(String nullText):返回 Joiner,如果某个被添加的元素为 null,用 nullText代替。
skipNulls():返回 Joiner,如果某个被添加的元素为 null,则跳过该与元素。
withKeyValueSeparator(String keyValueSeparator):返回一个 MapJoiner, 用 keyValueSeparator作为 MapEntity的 key和 value的分隔。
2.20 Objects:为 Object操作提供辅助功能。
静态方法:
equal(Object a, Object b):判断 a和 b是否相等。
hashCode(Object... objects):返回 objects数组的哈希码。
toStringHelper():返回 ToStringHelper的实例, ToStringHelper是个内部类,有三个 public成员方法: add(String name, Object value)、 addValue(Object value)、 toString(), toString()返回的字符串类似于: MyClass{name1=value1, name2=value2}。
firstNonNull(T first, T second):如果 first不为 null就返回 first,否则返回 second。 Second也为 null时会抛出异常。
2.21 Platform:
2.22 Preconditions:提供简单的静态方法来验证参数和状态。
静态方法:
checkArgument(boolean expression):如果 expression为 false则抛出异常。
checkArgument(boolean expression, String errorMessageTemplate, Object... errorMessageArgs):如果 expression为 false则抛出异常,异常信息由 errorMessageTemplate和 errorMessageArgs决定。例如: checkArgument(count > 0, "must be positive: %s", count) ,如果 count 为 -5 ,则抛出异常,异常信息为:“ must be positive : -5” 。
checkState(boolean expression):如果 expression为 false则抛出异常。它的重载方法类似与 checkArgument()。
checkNotNull(T reference):如果 reference为 null则抛出异常,否则返回 reference。
checkElementIndex(int index, int size):如果 index大于等于 0且小于 size,则返回 index,否则抛出异常。
checkPositionIndex(int index, int size):与上面的方法类似,区别在于这个方法是检查数组中的位置,因此 index可以等于 size。
checkPositionIndexes(int start, int end, int size):判断 start-end是否是有效的位置。
2.23 Predicates:提供了与 Predicate相关的静态实用工具方法。
静态方法:
alwaysTrue():返回 Predicate<T>,该谓词对任何输入都返回 true。
alwaysFalse():返回 Predicate<T>,该谓词对任何输入都返回 false。
isNull():返回 Predicate<T>,该谓词判断输入是否为 null。
notNull():返回 Predicate<T>,与 isNull()相反。
not(Predicate<T> predicate):返回与 predicate效果相反的 Predicate<T>。
and(Iterable<? Extends Predicate<? super T>> components):返回 Predicate<T>,效果是 components中所有 Predicate的 &&运算 (与 )。
or(Iterable<? Extends Predicate<? super T>> components):返回 Predicate<T>,效果是 components中所有 Predicate的 ||运算 (或 )。
equalTo(T target):返回 Predicate<T>,该谓词判断输入是否与 target相等。
instanceOf(Class<> clazz):返回 Predicate<T>,该谓词判断输入是否是 clazz的实例。
in(Collection<? Extends T> target):返回 Predicate<T>,该谓词判断输入是否在 target中。
compose(Predicate<B> predicate, Function<A, ? extends B> function):返回 Predicate<T>,该谓词先对输入调用 function的 apply()方法,在对结果用谓词 predicate进行判断。
containsPattern(String pattern):返回 Predicate<T>,该谓词封装了一个以 pattern为正则表达式的 Pattern,用于判断输入的字符串是否能被 Pattern匹配。
contains(Pattern pattern):返回 Predicate<T>,与上面的方法类似。
2.24 Splitter:用于将字符串分为子串的工具。
2.25 Strings:提供了与 String相关的静态实用工具方法。
静态方法:
nullToEmpty(String string):如果 string为 null则返回“”,否则返回 string。
emptyToNull(String string):如果 string为 null或“”则返回 null,否则返回 string。
isNullOrEmpty(String string):如果 string为 null或“”则返回 true,否则返回 false。
padStart(String string, int minLength, char padChar):如果 string的长度小于 minLength,则在 string的头部补 minLength-string.length()个 padChar。
padEnd(String string, int minLength, char padChar):与上面的方法类似,只是 padChar会被补在 string的尾部。
repeat(String string, int count):重复 count次 string。
2.26 Suppliers:提供了一些有用的 Supplier。
静态方法:
compose(Function<? super F, T> function, Supplier<F> supplier):返回一个 Supplier<T>, 当调用它的 get()方法时,先调用 supplier的 get(),把结果作为参数调用 function的 apply()方法,返回最终的结果。
memoize(Supplier<T> delegate):返回一个 Supplier<T>,当调用它的 get()方法时,先判断有没有缓存的对象,如果有则直接返回对象,否则用 delegate新建一个对象。
memoizeWithExpiration(Supplier<T> delegate, long duration, TimeUnit unit):与上面的方法类似,但是要判断缓存中的对象是否过期。
ofInstance(T instance):返回一个 Supplier<T>,当调用它的 get()方法时,始终返回 instance。
supplierFunction():返回一个 Function<Supplier<T>, T>,当调用它的 apply(input)方法时,返回 input.get()。
2.27 Throwables:提供了与 Throwable相关的静态实用工具方法。
以上。