質問:
Java でラムダ式を使用する場合、比較する方法はありますか?それらが等しいかどうかを比較するには?
答え:
仕様の観点から:
言語仕様は、評価することのみを保証します。ラムダ式の結果、ターゲット関数インターフェイスを実装するクラスのインスタンスが生成されます。ただし、これらのインスタンスのアイデンティティやエイリアスについては保証されません。
実装の観点から:
現在の Java 実装は、合成インスタンス間の 1:1 の関係を確立します。ラムダとそのキャプチャ サイトを実装するために使用されるクラス。同じラムダが変数をキャプチャせずに同じキャプチャ サイトで評価される場合、同じインスタンスが生成され、参照等価性 (==) を使用して比較できます。
シリアル化可能なラムダの場合、その状態は簡単に取得できます。ただし、パフォーマンスとセキュリティが低下します。
包括的等価性の課題:
一般に、2 つのラムダが同じ関数インターフェイスと動作関数を持つかどうかを判断するのは現実的ではありません。
現在の機能と制限:
メソッド参照には、将来、リスナーとして使用できるようにカスタマイズ可能な等価性定義が含まれる可能性があります。
Java Expert Group は、ラムダのより選択的な equals/hashCode および記述的な toString メソッドの情報を公開することを検討しました。しかし、大多数のユーザーにパフォーマンスへの影響が及ぶ可能性があるため、彼らはこれを中止することを決定しました。
toString に関しては、最終的な結論には達しませんでしたが、双方に議論があり、この問題を再検討する可能性が残されています。将来的には。
以上がJava ではラムダ式の等価性を比較できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。