小编Tam*_*man的帖子

Java lambda只抛出表达式而不是语句式

在Java(目前使用Java 8)中,我可以编写这个并且所有编译都很好:

Supplier<Long> asd = () -> {
    throw new RuntimeException();
};
Run Code Online (Sandbox Code Playgroud)

但是,我不能这样写:

Supplier<Long> asd = () -> throw new RuntimeException(); // This won't compile :(
Run Code Online (Sandbox Code Playgroud)

有谁知道为什么Java的实现不允许这样的样式(表达式lambda)和只有语句/代码块样式lambda?

我的意思是,由于lambda 抛出RuntimeException,为什么JDK不能将lambda表达式推断为:

new Supplier<Long>() {
    @Override
    public Long get() {
        throw new RuntimeException();
    }
};
Run Code Online (Sandbox Code Playgroud)

这是在specs/docs中的某处记录的吗?这是仅在JDK> 8中添加的吗?

java lambda throw java-8 functional-interface

17
推荐指数
2
解决办法
553
查看次数

标签 统计

functional-interface ×1

java ×1

java-8 ×1

lambda ×1

throw ×1