【问题标题】:propagating Exception from inside of a forEach loop从 forEach 循环内部传播异常
【发布时间】:2017-08-10 15:47:50
【问题描述】:
public controllerMethod() throws UnsupportedEncodingException {
  getVehicles(req);
}

public List<vehicles> getVehicles(A req) throws UnsupportedEncodingException{
   someObject.forEach(obj -> {  
      getVehicles2(req); //try catch resolves but why wouldn't throws handle this ? 
   }
}

public getVehicles2(A req) throws UnsupportedEncodingException{

}

我正在尝试从 getVehicles 调用 getVehicles2()。编译器抱怨这样做有一个未处理的异常。不使用 throws 声明异常不足以将其传播到父控制器方法。 Try/catch 会解决错误,但我认为声明 throws 会将相关错误传播到调用方法。

【问题讨论】:

  • 对我来说看起来不错;编译器不应该抱怨。
  • @mrod 抱歉改变了问题。该调用在 forEach 循环中,这就是为什么它可能不适用于顶部的 throws

标签: java exception unhandled-exception throws


【解决方案1】:

检查消费者的签名。如果将 lambda 表达式扩展为匿名类,您会得到:

new ArrayList<>().forEach(new Consumer<Object>() {
    @Override
    public void accept(Object obj) {
        getVehicles2(req);
    }
}

如您所见,foreach 接收一个 Consumer,其 accept 方法没有您需要的“throws UnsupportedEncodingException” .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2023-03-19
    • 2016-09-26
    相关资源
    最近更新 更多