メソッド参照をオブジェクト型の変数に直接割り当てることができないのはなぜですか? 質問する

メソッド参照をオブジェクト型の変数に直接割り当てることができないのはなぜですか? 質問する

java-8構文に関する簡単な質問です。なぜJLS-8次のような表現が制限されるのでしょうか。

Object of_ref = Stream::of;  // compile-time error

そして次のようなものだけを許可します:

java.util.function.Function of_ref = Stream::of;
Object obj = of_ref; // compiles ok

?

ベストアンサー1

Objectは関数型インターフェースではなく、メソッド参照は関数型インターフェースにのみ割り当てることができます。例えば、JLS #15.13.2

メソッド参照式は、T が関数型インターフェース型 (§9.8) であり、その式が T から派生した基底ターゲット型の関数型と一致する場合、割り当てコンテキスト、呼び出しコンテキスト、またはキャスト コンテキストでターゲット型 T と互換性があります。

おすすめ記事