Java では、メソッド参照を使用して関数インターフェイスを作成できます。たとえば、Consumer インターフェイスは 1 つの引数を受け取り、それに対してアクションを実行します。驚くべきことに、戻り値の型を持つメソッド参照も Consumer インターフェイスに一致させることができます。
この動作を許可する決定は、メソッドの呼び出し方法と同様の方法でメソッドを関数型インターフェイスに適応させるという考えに基づいています。具体的には、戻り値が無視される場合でも、値を返すメソッドはすべて Consumer インターフェイスに適合させることができます。
ラムダ式に関しては、次の 2 つの形式があります。式と (引数) -> { ステートメント* }。後者の形式は、コード パスが値を返そうとしない場合、void と互換性があります。前者の形式は、式が値に評価される場合、値互換です。ただし、式がステートメントでもある場合 (メソッド呼び出しやインクリメント/デクリメント演算子など)、void 互換にすることができます。
たとえば、式 s -> s は値互換ですが、 s -> は値互換です。 i は void 互換です。これは、インクリメント/デクリメント演算子を単独でステートメントとして使用できるためです。もう 1 つの void 互換式は s -> です。 new Whatever(s) は、クラス インスタンス作成式としてステートメントとしても使用できます。
興味深いことに、(arg) -> methodReturningVoid(arg) は、値の互換性がない唯一の式形式です。
以上が戻り値の型を持つメソッド参照で Java のコンシューマ インターフェイスを実装できるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。