我知道 java 中的 lambda 不能抛出检查异常,但可以抛出 RuntimeException,但为什么下面的代码需要括号?
Map<String, Integer> m = new HashMap<>();
Integer integer = m.computeIfAbsent("", s -> {throw new IllegalArgumentException("fail");});
为什么你不能拥有?
m.computeIfAbsent("", s -> throw new IllegalArgumentException("fail"));
是不是因为编译器假设它会在这个实例中返回一个 int,所以即使它被抛出也不能返回异常?
最佳答案
Java 语言规范 describes the body of a lambda expression
A lambda body is either a single expression or a block (§14.2).
然而,这
throw new IllegalArgumentException("fail")
是throw
statement ,不是一个表达式。因此,编译器拒绝将其作为 lambda 表达式的主体。
您可以深入了解所有类型的表达式,here (遵循语法)。
关于java - 为什么抛出运行时异常的 Java Lambda 需要括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41961392/