我正在阅读函数式 Java 库的源代码并注意到这一点:
public static <T> Option<T> none() {
return new None<T>();
}
我想知道为什么他们不总是返回一个单例参数,特别是因为 None 的相等实现:
private static final class None<A> extends Option<A> {
...
@Override
public int hashCode() {
return 31;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
return true;
}
}
所以我在 Functional Java 的论坛上进行了搜索,我发现了这个问题和答案:
是否可以将其设置为不会为每次调用 none 创建一个新的 None ,我们可以在所有情况下使用单个对象来表示 None 吗?
不,但是,谁在乎呢?如今,JIT 优化器可以很好地处理这些事情。
我的问题是 JIT 优化器如何以不需要返回单例的方式处理这个问题。我知道对象创建很便宜,但我认为单例会更便宜,在这种情况下它不会增加任何复杂性。