fla*_*kes 12 java lambda runnable
我很好奇为什么带有返回类型的lambda不能被转换为a 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
Run Code Online (Sandbox Code Playgroud)
See*_*ose 14
该Runnable接口定义了run与返回类型void方法.在lambda表达式中,这意味着箭头后面的部分->必须是一个语句.这在JLS§15.27.3中进行了解释:
如果函数类型的结果为void,则lambda主体是语句表达式(第14.8节)或与void兼容的块.
该JLS $ 14.5明确规定了一个语句的语法.如上所述,它必须是"ExpressionStatement"(第14.8节).在那里,您可以发现一个简单的文字不是一个适当的表达式,而是一个方法调用(即使它返回一些东西).