Collections.immutable(x) のような方法で、インスタンスまたは関数インターフェイスの静的メソッドの出力を強制的に不変にする方法はありますか?
たとえば、一種の Comparator 機能インターフェイスを作成し、インスタンスを作成した静的ビルダーのようなメソッドの一部に対して「.thenComparing()」などの連鎖操作を許可しないようにしたいと思います。
Collections.immutable(x) のような方法で、インスタンスまたは関数インターフェイスの静的メソッドの出力を強制的に不変にする方法はありますか?
たとえば、一種の Comparator 機能インターフェイスを作成し、インスタンスを作成した静的ビルダーのようなメソッドの一部に対して「.thenComparing()」などの連鎖操作を許可しないようにしたいと思います。
不変クラスのインスタンスを返すことで、戻り値を強制的に不変にすることができます。クラスが何をするかを知らずに、クラスのインスタンスを不変にする汎用的な方法はありません。
.thenComparing(...)
質問の 2 番目の段落には、コンパレータを変更可能 にする誤った仮定が含まれています。thenComparing
元のコンパレータをそのままにして、新しいコンパレータを作成します。
悲しいことに、Java のコレクション型には不変のコレクションがありませんが、google guava には多くの不変のコレクションが付属しているため ( https://code.google.com/p/guava-libraries/wiki/ImmutableCollectionsExplainedを参照)、それらをリターンとして使用できます。タイプ。しかし、これが何かを比較する能力とどのように相関するかはわかりません。なぜなら、比較しても物事は変わらないからです。