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 と互換性があります。