java 为什么只有在使用List.forEach时才会出现未处理的异常类型错误?

ldxq2e6h  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(133)

我有一个抛出异常的方法:

public void myMethod(MyBean bean) throws SomeException {
    ...
}

另一个方法是像这样调用这个方法,没有来自Eclipse的错误/警告:

public void processBeanList(List<MyBean> myBeanList) {
    for (int i = 0; i < myBeanList.size(); i++) {
        MyBean myBean = myBeanList.get(i);
        myMethod(myBean);
    }
}

但是,如果我将这个processBeanList的实现更改为以下内容,我会得到一个“Unhandled exception type SomeException”错误:

public void processBeanList(List<MyBean> myBeanList) {
    myBeanList.forEach(myBean -> {
        myMethod(myBean); // Eclipse underlines this, mentions error
    });
}

我意识到如果方法抛出Exception,那么它应该被处理或重新抛出,但是这两个实现之间是否有我遗漏的东西,这将导致Eclipse在一个情况下显示错误而不是另一个?或者这只是Eclipse,出于某种原因,在第二个示例中拾取,而不是在第一个示例中,当它在两种情况下都应该拾取时?

nukf8bse

nukf8bse1#

因为forEach(...)的参数是Consumer

myBean -> {
  myMethod(myBean);
}

上面是消费者作为lambda函数的实现。
Consumer.accept()不会抛出异常,因此您必须以某种方式处理它-可能会捕获并作为未检查异常重新抛出。

相关问题