相关疑难解决方法(0)

为什么我不能在Java 8 lambda表达式中抛出异常?

我升级到Java 8并试图用一个新的lamdba表达式替换一个简单的迭代迭代.循环搜索空值并在找到异常时抛出异常.旧的Java 7代码如下所示:

for (Map.Entry<String, String> entry : myMap.entrySet()) {
    if(entry.getValue() == null) {
        throw new MyException("Key '" + entry.getKey() + "' not found!");
    }
}
Run Code Online (Sandbox Code Playgroud)

我将其转换为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!");
    }
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么throw这里不允许的声明以及如何纠正这个问题?

Eclipse的快速修复建议看起来并不合适......它只是throw用一个try-catch块来围绕语句:

myMap.forEach((k,v) -> {
    if(v == null) {
        try {
            throw new …
Run Code Online (Sandbox Code Playgroud)

java lambda exception java-8

30
推荐指数
2
解决办法
4万
查看次数

标签 统计

exception ×1

java ×1

java-8 ×1

lambda ×1