试图添加一个forEach循环,但是内部try catch似乎在每个元素上打开/关闭(那很昂贵,对吧?)。因此,我将其移到了范围之外,但是IntelliJ给出了错误,指出不需要外部接球,而内部投掷操作没有接球。
我无法检查forEach的源代码,因为intellij显示.class文件。并且将try catch移入内部效果很好。
//错误代码。给出错误信息,说明.put没有try / catch,并且catch不会抛出任何异常
try {
input.forEach(element->this.outputQ.put(element));
} catch (InterruptedException e1) {
e1.printStackTrace();
this.exit=true;
}
//良好代码
input.forEach(element->{
try {
this.outputQ.put(element);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
this.exit=true;
}
});
//放置在阻塞队列中,因此中断了
是因为forEach没有抛出异常吗?我是否也认为元素明智的尝试捕获代价高昂?(我该怎么做才能避免这种情况)