为什么我不能在 Java 8 lambda 表达式中引发异常?
我升级到Java 8,并尝试用新的lambda表达式替换Map的简单迭代。该循环搜索 null 值,如果找到异常,则引发异常。旧的 Java 7 代码如下所示:
for (Map.Entry<String, String> entry : myMap.entrySet()) {
if(entry.getValue() == null) {
throw new MyException("Key '" + entry.getKey() + "' not found!");
}
}
我试图将其转换为Java 8,如下所示:
myMap.forEach((k,v) -> {
if(v == null) {
// OK
System.out.println("Key '" + k+ "' not found!");
// NOK! Unhandled exception type!
throw new MyException("Key '" + k + "' not found!");
}
});
谁能解释一下为什么这里不允许这种说法,以及如何纠正这一点?throw
Eclipse的快速修复建议在我看来并不合适...它只是用一个块将语句括起来:throw
try-catch
myMap.forEach((k,v) -> {
if(v == null) {
try {
throw new MyException("Key '" + k + "' not found!");
}
catch (Exception e) {
e.printStackTrace();
}
}
});