从 forEach 循环内部传播异常

propagating Exception from inside of a forEach loop

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 会将相关错误传播到调用方法。

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

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

如您所见,foreach 接收一个 Consumer,其 accept 方法执行没有您需要的 "throws UnsupportedEncodingException"。