gpt4 book ai didi

java - 定义谓词和函数的正确方法

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:46 26 4
gpt4 key购买 nike

定义Predicate时的或 Function的,我曾经将它们创建为 static final

private static final Predicate<SomeDto> SOME_PREDICATE =
new Predicate<SomeDto>() {
@Override
public boolean apply(SomeDto input) {
return input.isValid();
}
}

但是我注意到 enum 版本也有很多用途,例如

private enum SomePredicate implements Predicate<SomeDto> {
INSTANCE;

@Override
public boolean apply(SomeDto input) {
return input.isValid();
}
}

我知道 enum vs static final主题,但是使用枚举相对于带有谓词或函数的 static final 有什么真正的优势吗?

最佳答案

在这种情况下,enum 单例方法的主要优点是 Predicate/Function 是自动Serializable.

出于这个原因,Guava 本身将 enum 用于它的一些 PredicateFunction 实现,等等。 Josh Bloch 建议在 Effective Java 第 2 版中使用单例时使用 enumItem 3 .引用:

This approach is functionally equivalent to the public field approach, except that it is more concise, provides the serialization machinery for free, and provides an ironclad guarantee against multiple instantiation, even in the face of sophisticated serialization or reflection attacks. While this approach has yet to be widely adopted, a single-element enum type is the best way to implement a singleton.

不过,Guava 通过其 API 中的静态方法公开了这些单例,避免了用户代码中 SomePredicate.INSTANCE 的丑陋。

关于java - 定义谓词和函数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29172967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com