12
戻り値の型を持つラムダをRunnable
にキャストできないのはなぜか分かりませんでしたが、非voidメソッドの参照はできません。ラムダキャスティングのルール
Runnable r1 =() -> 1; // not allowed
// error: incompatible types: bad return type in lambda expression
// int cannot be converted to void
Runnable r2 = ((Supplier)() -> 1)::get; // allowed
JLSのどこに言及しているかを指摘してください。その場合、「矢印の後に続く部分が_statement_でなければなりません」ということになりますか?私はそれを探しています。 – Tunaki
@ Tunakiそれを見つけました。[§15.27.3](https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.27.3)です。 – RealSkeptic
@RealSkepticは本当に完璧です:*関数型の結果がvoidの場合、ラムダ本体はステートメント式(14.8)またはvoid互換のブロックです*とプライマリ式はステートメント式ではありません(isn 'ブロック)。 – Tunaki