在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中添加的吗?