2017-10-19 31 views
1

我有一個用例,我想返回一些數據(一個對象),因爲我拋出一個異常。我正在考慮將數據存儲在自定義檢查的異常類中,並在異常處於堆棧中較高位置時通過getter訪問它。這被認爲是一個壞主意?如果是的話,有什麼更好的選擇?我見過發送相關消息給定製的異常,但並沒有真正看到它被用作數據存儲。將數據存儲在自定義檢查異常中是不是一個好主意?

我確實偶然發現了Return a value AND throw an exception?,其中一個答案有類似之處。我正在考慮重載構造函數和提供對象,而不是將它作爲另一個參數傳遞。這被認爲是不好的編碼習慣?

public class NameException extends Exception 
{ 

    private static final long serialVersionUID = -4983060448714460116L; 
    private Service externalService; 


    public NameException(final String message) 
    { 
     super(message); 
    } 

    public NameException() 
    { 
    } 

    public NameException(Service externalService) 
    { 
     this.externalService =externalService; 
    } 

    public Service getExternalService() 
    { 
     return externalService; 
    } 
} 
+1

我認爲這不是一個壞主意,它是根據你的需要。 – assembler

回答

2

這是一種成熟的模式。

例如,Spring的RestTemplate的HTTP請求方法可能拋出RestClientResponseException具有像byte[] getResponseBodyAsByteArray()方法, String getResponseBodyAsString()HttpHeaders getResponseHeaders()String getStatusText()等。

+0

作爲後續工作,對傳入自定義異常的參數添加空檢查是否有意義?您提到的API似乎不是在做它,而只是指出哪些字段可以爲空。 – linuxNoob

+0

添加空檢查在哪裏?這是投擲代碼的責任,填充任何可能不爲空的字段。如果您信任該代碼,則不需要添加代碼進行檢查。取決於你想成爲怎樣的防守。 – slim

+0

Null檢查傳遞給構造函數的形式參數,以便在我的帖子中使用'externalService'。 – linuxNoob

相關問題