メソッド参照のコンシューマ インターフェイスとの互換性を理解する
タイトルにもかかわらず、「戻り値の型を持つ Java メソッド参照がコンシューマ インターフェイスと一致するのはなぜですか」 「interface?」のように、ラムダ式とメソッド参照には、単なる型一致を超えた複雑な関係があります。このトピックを詳しく掘り下げて、関係する複雑さを明確にしましょう。
コード例の lambda1 や lambda2 など、戻り値の型を使用してラムダ式を定義する場合、実装する関数インターフェイスの型シグネチャに従います。ただし、メソッド参照では驚くべきケースが発生します。
consumption メソッドを参照する lambda3 と lambda4 を考えてみましょう。直感的には、consumer の戻り値の型 (String) と Consumer インターフェイスの予想される void 戻り値の型が一致しないために、lambda3 が失敗することが予想されるかもしれません。ただし、lambda3 は失敗する代わりに成功します。
その答えは、メソッド参照の背後にある設計原則にあります。これらは、戻り値に関係なく、関数インターフェイスにメソッドを適応できるようにすることを目的としています。この場合、consumption メソッドの戻り値 (String) は無視されているように見え、Consumer インターフェイスの void 要件に準拠できるようになります。
興味深いことに、同じ原則がラムダ式にも当てはまります。ラムダ形式 (引数) ->式が値と互換性があるのは、式がステートメント以外の値に評価される場合のみです。ただし、式がステートメント自体である場合 (メソッド呼び出し、インクリメント/デクリメントなど)、void 互換になります。したがって、consume は有効な void 互換フォームを表します。
注目すべき例外として、フォーム (arg) -> は、 methodReturningVoid(arg) は、値の互換性がない唯一の式です。これらの複雑さを理解すると、Java のラムダ式とメソッド参照の理解が深まり、それらの機能を効果的に活用できるようになります。
以上が戻り値の型を持つ Java メソッド参照がコンシューマ インターフェイスと一致しているように見えるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。