gpt4 book ai didi

java - 返回类型为 void 的 Lambda 表达式可以使用包装器进行编译,但不能使用原始类型进行编译

转载 作者:行者123 更新时间:2023-12-01 09:21:24 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why do Consumers accept lambdas with statement bodies but not expression bodies?

(3 个回答)


去年关闭。



   interface A {
void s();
}

public static void main(String[] args) {
A a = () -> 5; // DOES NOT compile
A b = () -> new Integer(5); // does compile
A c = () -> Stream.of(1, 2, 3); // does compile
}

第一行不编译而第二行和第三行编译的原因是什么?

最佳答案

包装与原始不是原因。以下内容也不会编译:

Integer i = 5;
A b = () -> i;

这在 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.


5既不是语句也不是 void 兼容块。所以 A a = () -> 5;不会编译。

这种限制的原因是返回空值的 lambda 只有在它通过副作用运行时才有意义。只需返回一个类似 () -> 5 的值没有副作用,因此这样的 lambda 表达式绝对是一个错误。

关于java - 返回类型为 void 的 Lambda 表达式可以使用包装器进行编译,但不能使用原始类型进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60595606/

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