2014-11-06 115 views
-1

我有一個問題,不理解我從我的try - catch語句,它有兩個漁獲得的錯誤消息。嘗試 - 雙Catch語句Java

我相信一切是正確的,但是,我得到一個錯誤exception X is never thrown in body of corresponding try statement.

我相信代碼是正確的,但兩者的catch子句被拒絕!

@PUT 
@Path("{id}") 
@Consumes("application/json") 
public Response updatePerson(@PathParam("id") int id, String is) { 
    try { 
     Person person = readPerson(is); 
     person.setId(id); 
     Person locPerson = persons.get(id); 
     if(locPerson == null){ 
      throw new WebApplicationException(Response.Status.NOT_FOUND); 
     } 
     persons.put(person.getId(), person); 

     return Response.status(Response.Status.OK).build(); 
    } catch (JSONException e) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } catch (ParseException e) { 
     return Response.status(Response.Status.BAD_REQUEST).build(); 
    } 
} 
+0

難道只有Java或JSON包容???請添加適當的標籤。 – 2014-11-06 18:48:55

+0

它看起來像jsonexception或parseexception永遠不會扔在你的嘗試塊這就是爲什麼ide抱怨agaist它 – DeepInJava 2014-11-06 18:50:32

+0

請,當你收到一條錯誤消息時,不要編輯或修改它時張貼在這裏。用'X'代替編譯器抱怨的異常名稱。這是一個很大的禁忌。永遠不要模糊錯誤消息的關鍵部分(刪除敏感文本_you_發起是好的,但就是這些)。 – 2014-11-06 18:58:34

回答

1

如果沒有叫你try塊的方法可能拋出JSONException或ParseException的,你不應該趕上這些例外。這就是exception X is never thrown in body of corresponding try statement的含義。

+0

如果通過使用泛型或其他方式,某個方法可能會拋出一個未通過'throws'子句指定的異常(在將方法傳遞給另一個方法時可能需要執行該方法,並且傳遞的方法可能會拋出一個檢查的異常應該通過另一個過濾)是否有任何「好」的方法來捕捉這些異常? – supercat 2014-11-06 21:21:39

+0

@supercat我不認爲一個方法可以拋出一個沒有在'throws'子句中指定的檢查異常。如果您將方法傳遞給另一個將執行該方法的方法,則執行傳遞方法的方法必須處理所傳遞的方法可能拋出的所有已檢查的異常(或將它們聲明在自己的'throws'子句中)。 – Eran 2014-11-06 21:25:52

0

這意味着你正在試圖趕上例外是永遠不會try塊內被拋出,所以其冗餘有它在catch語句 - >警告當作錯誤