gpt4 book ai didi

java - Lambda 转换规则

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:14 25 4
gpt4 key购买 nike

我很好奇为什么不能将具有返回类型的 lambda 转换为 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

最佳答案

Runnable接口(interface)定义了返回类型为 void 的 run 方法。在 lambda 表达式中,这意味着箭头 -> 之后的部分必须是一个语句。这在 JLS §15.27.3 中有解释。 :

If the function type's result is void, the lambda body is either a statement expression (§14.8) or a void-compatible block.

JLS $14.5清楚地定义语句的语法。如上所述,它必须是一个“ExpressionStatement”(§ 14.8)。看看那里,您会发现一个简单的文字不是一个合适的表达式,但是一个方法调用是(即使它返回一些东西)。

关于java - Lambda 转换规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36696340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com