vto*_*tor 5 java enums predicate guava
在定义谓词或函数时,我曾经将它们创建为static final
private static final Predicate<SomeDto> SOME_PREDICATE =
new Predicate<SomeDto>() {
@Override
public boolean apply(SomeDto input) {
return input.isValid();
}
}
Run Code Online (Sandbox Code Playgroud)
但是我注意到,enum例如,版本也有很多用途
private enum SomePredicate implements Predicate<SomeDto> {
INSTANCE;
@Override
public boolean apply(SomeDto input) {
return input.isValid();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道枚举与静态最终主题,但是使用枚举对谓词或函数的静态最终是否有任何真正的优势?
enum在这种情况下,单例方法的主要优点是Predicate/ Function是自动的Serializable.
由于这个原因,Guava本身使用enums来实现它的一些Predicate和Function实现.Josh Bloch建议enum在Effective Java 2nd Ed.第3项中使用单例时使用s .报价:
这种方法在功能上等同于公共字段方法,除了它更简洁,免费提供序列化机制,并提供防止多实例化的铁定保证,即使面对复杂的序列化或反射攻击.虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方法.
Guava在其API中通过静态方法暴露了这些单例,避免了SomePredicate.INSTANCE用户代码中的丑陋.
| 归档时间: |
|
| 查看次数: |
356 次 |
| 最近记录: |