2015-12-01 57 views
1

如果我拋出一個非法的參數異常,我也想通過像"Value can not be negative"之類的原因。我不喜歡有這樣的代碼的想法:在文件或類中存儲自定義異常消息

public void setAge(int age) { 
    if (age >= 0) { 
     this.age = age; 
    } else { 
     throw new IllegalArgumentException("Age can not be negative"); 
    } 
} 

我想的有點像

public static final String AGE_CAN_NOT_BE_NEGATIVE = "Age can not be negative"; 
在另一類

,所有的自定義異常信息存儲在一個文件中。這樣我也可以在單元測試中使用消息來查看是否引發了正確的異常,當我使用該函數時。我也可以重複使用這些消息。自定義異常也是如此,我寧願將郵件存儲在另一個文件中。

事情是:如果有很多自定義消息用於例外,那麼類可以變得非常大。

你有很多自定義消息的方法是什麼?

回答

0

我正在使用的團隊使用的一種可能方法是創建自定義例外。所以,下面的例子:

public void setAge(int age) { 
    if (cost >= 0) { 
     this.age = age; 
    } else { 
     throw new AgeIllegalArgumentException(); 
    } 
} 

... 

private class AgeIllegalArgumentException extends IllegalArgumentException { 
    public AgeIllegalArgumentException() { 
     super("Age can not be negative"); 
    } 
} 

通過這種方式,你可以在測試中,正確的拋出異常檢查。我們傾向於爲每個類定義這些自定義異常,但這取決於您希望的粒度。如果上面的是一類Person,我們就會有以下幾點:

private class PersonIllegalArgumentException extends IllegalArgumentException { 
    public PersonIllegalArgumentException(String msg) { 
     super(msg); 
    } 
} 

在上面你可以有一個靜態String,如果你需要訪問的錯誤消息,也結合這兩種解決方案。

+0

我也在想這個,但我儘量避免自定義異常,因爲它會加載類的數量。 'IllegalArgumentException'是每個開發人員都熟悉的東西,並且隨着堆棧跟蹤打印出類,它被拋出的位置,您應該發現您的編碼/使用錯誤足夠快。例如,我將使用GUI的消息。而且,我寧願在另一個文件中定義消息,然後用這些字符串創建一個自定義異常。 – Simons0n

+0

像往常一樣,這是需要首先考慮的事情。我並不是在任何地方提倡這種模式,但是我們的代碼中有一些地方我認爲它是合理的。此外,它有助於測試,因爲您可以檢查代碼的某些部分拋出特定的異常。 – Alf