2013-01-14 63 views
1

我是否應該生成異常消息(在我的示例中爲link參數),還是我的構造函數需要參數message我應該生成異常消息嗎?

class ReadFromNotConnectedInputException extends RuntimeException { 

    private String link; 

    public ReadFromNotConnectedInputException(final String link) 
    { 
     this.link = link; 
    } 

    public String getLink() 
    { 
     return link 
    } 

    public String getMessage() 
    { 
     return String.format("Cannot read from link \"%\", link not connected.", link); 
    } 
} 
+1

'inputName'沒有定義。 – Archer

回答

1

由於您選擇了RuntimeException,這意味着您不打算在本地處理它(接近它所在的位置),但是在堆棧中的某個更高級別處理許多不同的異常。

在這種情況下,將不會涉及異常特定的邏輯;您會向日志文件寫入錯誤條目並清理。因此,簡單的message屬性將比單獨的String屬性+複雜的getMessage實現更適合帳單。

0

您應該接受message參數並調用super構造函數。

0

IMO如果異常是API的一部分,那麼您應該在構造函數中將message參數傳遞給super。

這樣做的主要優點是,您可以更改不同模塊中消息的格式,並且如果保留固定格式,那麼所有格式都將保持相同格式。

3

我會像下面這樣寫它。如果我要努力創建一個異常,我會讓它成爲一個檢查異常。

class ReadFromNotConnectedInputException extends RuntimeException { 
    private final String link; 

    public ReadFromNotConnectedInputException(final String link) { 
     super("Cannot read from link \"" + link + "\", link not connected."); 
     this.link = link; 
    } 

    public String getLink() { 
     return link 
    } 
} 

class ReadFailedLinkNotConnectedException extends Exception { 
    public ReadFailedLinkNotConnectedException (final String link) { 
     super(link); 
    } 
} 
+0

閱讀http://www.oracle.com/technetwork/articles/entarch/effective-exceptions-092345.html之後,我選擇了一個未經檢查的異常。你是否建議不要創建我自己的未經檢查的異常? –

+0

儘管源代碼是C++,但我決定根據需要對消息進行格式化,因爲4.在http://www.boost.org/community/error_handling.html –

+1

您或者希望捕獲您的特定異常,在這種情況下應該是一個特定於被捕獲時會發生什麼的檢查異常,或者您不希望它被捕獲,在這種情況下,它最終會在某個日誌中出現,並且您使用的類無關緊要。即您可以重複使用現有的一個。 –