Functional 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 を作成しないように設定することはできますか?
いいえ、しかし、誰が気にしますか?JIT オプティマイザーは、最近ではこれらのことを非常にうまく処理できます。
私の質問は、シングルトンを返す必要がないように、JIT オプティマイザーがこれをどのように処理するかです。オブジェクトの作成が安いことは知っていますが、シングルトンの方が安いと思います。この場合、複雑さは追加されません。