簡體   English   中英

如何在Java中傳播來自重寫方法的異常

[英]How to propagate exception from an overridden method in Java

終止執行重寫方法的最佳做法是什么? 以下是解釋上下文的示例代碼:

@Override
protected String doInBackground(String... params) {

    URL serverURL = null;
try {
        serverURL = new URL((urlString));

    } catch (MalformedURLException e) {
        e.printStackTrace();
    }
...
...

return response.toJSONString();
}

在上面的代碼片段中,我被迫捕獲MalformedURLException,所以我使用了try catch塊。 如果發生異常,我想跳過catch塊下面的所有代碼並傳播相同的異常或我將在catch塊中拋出的另一個異常,直到一直到Main方法,跳過catch塊和在所有調用方法中跳過中間的代碼。 這個怎么做?

問題是:1)我不能將throws子句添加到方法簽名中,因為它被覆蓋並且基類不允許它。

2)由於該方法必須返回一個String,我必須在catch塊之后指定return語句。(如果發生異常,我該返回什么?)

3)在catch塊中使用System.exit - 正如此論壇上的其他帖子所指出的那樣,當您希望代碼可重用時,這可能不是一個好習慣。

這種情況的最佳實踐是使用RuntimeException包裝MalformedURLException

catch (MalformedURLException ex) {
    throw new RuntimeException("Failed constructing URL", ex);
}

理想情況下,您真的想編輯方法的throws子句,以便它可以容納任何可能源於覆蓋的異常; 但是因為在你的情況下這是不可能的(根據你的條件),上面對我來說似乎是最合理的。

一個相關的最佳實踐是避免在包裝之前記錄異常。 從設計的角度來看,沒有必要這樣做 - 調用者已經可以訪問原始的Exception對象(通過拋出的RuntimeExceptiongetCause()方法),因此調用者應該決定是否記錄它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM