我升级到了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的快速修复建议对我来说看起来不正确...它只是用try-catch
块包围了throw
语句:
myMap.forEach((k,v) -> {
if(v == null) {
try {
throw new MyException("Key '" + k + "' not found!");
}
catch (Exception e) {
e.printStackTrace();
}
}
});