Java lambda 仅抛出表达式样式而不是语句样式
2022-09-02 23:37:22
在Java中(目前使用Java 8),我可以写这个,一切都会编译得很好:
Supplier<Long> asd = () -> {
throw new RuntimeException();
};
然而,我不能这样写:
Supplier<Long> asd = () -> throw new RuntimeException(); // This won't compile :(
有谁知道为什么Java的实现不允许这样的样式(表达式lambda),而只允许语句/代码块样式的lambda?
我的意思是,既然 lambda 只是抛出了 RuntimeException,为什么 JDK 不能将 lambda 表达式推断为:
new Supplier<Long>() {
@Override
public Long get() {
throw new RuntimeException();
}
};
这是否记录在规范/文档的某个地方?这是否仅在 JDK > 8 中添加?