2017-08-10 150 views
0
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語句就解決了錯誤,但我想聲明拋出將傳播有關錯誤調用方法。從forEach循環內部傳播異常

+2

它看起來好像沒什麼問題;編譯器不應該抱怨。 – mrod

+0

@mrod對不起改變的問題。該電話是foreach循環裏面,這就是爲什麼它migth不投在上面工作 –

回答

1

檢查消費者的簽名。如果展開lambda表達式作爲一個匿名類,你會得到:

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

正如你所看到的,的foreach收到消費者,其接受方法不具有「拋出UnsupportedEncodingException 「你需要。