首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

[Google Guava札记](三)base

2012-10-28 
[Google Guava笔记](三)base2.14??? FinalizableSoftReferenceT:抽象类,只有构造函数。继承了SoftReferen

[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(Objecto)方法调用了参数o的toString()方法。apply(Objecto)的参数o如果为null,会抛出异常。

identity():返回Function<E,E>,该Function的apply(Objecto)方法直接返回参数o。

?????????forMap(Map<K,V> map):返回Function<K,V>,该Function的apply(Kkey)方法在map中查找键值为参数key的value,并返回value,如果key不在map中会抛出异常。

?????????forMap(Map<K,? extends V> map,@NullableV 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(@NullableE value):返回Function<Object,E>,该Function返回常量value。

?

2.19?Joiner:将文本片段连结起来。

静态方法:

on(String/charseparator):返回一个以separator为分隔的Joiner。

?

成员方法:

appendTo(A appendable,Iterable<?> parts):返回A,将parts中的元素的字符串表示添加到appendable中。

join(Iterable<?>parts):返回字符串。

useForNull(StringnullText):返回Joiner,如果某个被添加的元素为null,用nullText代替。

skipNulls():返回Joiner,如果某个被添加的元素为null,则跳过该与元素。

?????????withKeyValueSeparator(StringkeyValueSeparator):返回一个MapJoiner,用keyValueSeparator作为MapEntity的key和value的分隔。

?

2.20?Objects:为Object操作提供辅助功能。

静态方法:

equal(Object a, Objectb):判断a和b是否相等。

hashCode(Object...objects):返回objects数组的哈希码。

?????????toStringHelper():返回ToStringHelper的实例,ToStringHelper是个内部类,有三个public成员方法:add(Stringname, Object value)、 addValue(Objectvalue)、 toString(),toString()返回的字符串类似于:MyClass{name1=value1,name2=value2}。

?????????firstNonNull(T first, Tsecond):如果first不为null就返回first,否则返回second。Second也为null时会抛出异常。

2.21?Platform:

2.22?Preconditions:提供简单的静态方法来验证参数和状态。

静态方法:

checkArgument(booleanexpression):如果expression为false则抛出异常。

?????????checkArgument(booleanexpression, String errorMessageTemplate, Object...errorMessageArgs):如果expression为false则抛出异常,异常信息由errorMessageTemplate和errorMessageArgs决定。例如:checkArgument(count> 0, "must be positive: %s",count),如果count为-5,则抛出异常,异常信息为:“mustbe positive:-5”。

?????????checkState(booleanexpression):如果expression为false则抛出异常。它的重载方法类似与checkArgument()。

checkNotNull(Treference):如果reference为null则抛出异常,否则返回reference。

checkElementIndex(intindex, int size):如果index大于等于0且小于size,则返回index,否则抛出异常。

?????????checkPositionIndex(intindex, int size):与上面的方法类似,区别在于这个方法是检查数组中的位置,因此index可以等于size。

?????????checkPositionIndexes(intstart, 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<? ExtendsPredicate<? super T>>components):返回Predicate<T>,效果是components中所有Predicate的&&运算(与)。

?????????or(Iterable<? ExtendsPredicate<? super T>>components):返回Predicate<T>,效果是components中所有Predicate的||运算(或)。

equalTo(Ttarget):返回Predicate<T>,该谓词判断输入是否与target相等。

instanceOf(Class<>clazz):返回Predicate<T>,该谓词判断输入是否是clazz的实例。

in(Collection<? ExtendsT> target):返回Predicate<T>,该谓词判断输入是否在target中。

?????????compose(Predicate<B>predicate, Function<A, ? extends B>function):返回Predicate<T>,该谓词先对输入调用function的apply()方法,在对结果用谓词predicate进行判断。

?????????containsPattern(Stringpattern):返回Predicate<T>,该谓词封装了一个以pattern为正则表达式的Pattern,用于判断输入的字符串是否能被Pattern匹配。

?????????contains(Patternpattern):返回Predicate<T>,与上面的方法类似。

2.24?Splitter:用于将字符串分为子串的工具。

2.25?Strings:提供了与String相关的静态实用工具方法。

?

静态方法:

nullToEmpty(Stringstring):如果string为null则返回“”,否则返回string。

emptyToNull(Stringstring):如果string为null或“”则返回null,否则返回string。

isNullOrEmpty(Stringstring):如果string为null或“”则返回true,否则返回false。

?????????padStart(String string, intminLength, charpadChar):如果string的长度小于minLength,则在string的头部补minLength-string.length()个padChar。

?????????padEnd(String string, intminLength, char padChar):与上面的方法类似,只是padChar会被补在string的尾部。

repeat(String string, intcount):重复count次string。

?

2.26?Suppliers:提供了一些有用的Supplier。

静态方法:

?????????compose(Function<? superF, 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(Tinstance):返回一个Supplier<T>,当调用它的get()方法时,始终返回instance。

?????????supplierFunction():返回一个Function<Supplier<T>,T>,当调用它的apply(input)方法时,返回input.get()。

?

2.27Throwables:提供了与Throwable相关的静态实用工具方法。

?

以上。

?

?

热点排行