2015-11-26 59 views
0

是否有任何理由Throwable類沒有帶參數來構造消息字符串的構造函數?帶消息格式參數的Throwable構造函數

我相信這樣的構造將允許更乾淨和優雅的異常處理。

throw new Exception(String.format("Illegal value. Must be between %s and %s", min, max)); 

恕我直言會看起來更好這樣的:

throw new Exception("Illegal value. Must be between {} and {}", min, max); 

在中/大的應用程序,這可以節省大量的輸入,增加可讀性。

我想知道爲什麼Sun/Oracle還沒有做這個改變。我怎樣才能打開一張「票」來分析我的建議?

+0

http://stackoverflow.com/questions/7016578/string-format-using-a-exception-getmessage-as-a-format – Rehman

+0

「我不知道爲什麼Sun/Oracle還沒有做這個改變。「 - 我猜想只有Sun/Oracle可能知道... – Fildor

+0

也許是因爲還有其他包裝類。應該有一定的一致性,特別是當String.format(..)方法已經存在時才能實現。 – Dish

回答

3

我同意可能有一些更好的異常類型的構造函數。

然而,爲自己編寫輔助方法很容易。

public static String outOfBoundsMessage(int min, int max, int actualValuePassed) { 
    return String.format("Illegal value. %s is not between %s and %s", actualValuePassed, min, max); 
} 

然後,你可以做

throw new Exception(outOfBoundsMessage(0, 10, 15)); 
+0

這是我工作的當前方法,但可能會更好,因爲我們有數百個例外,並且(幾乎)所有這些例外都是用參數格式化的。 – andrucz

+0

@andrucz不幸的是沒有銀彈。可以說'Throwable'可以被賦予一個調用'this(String.format(format,args));'的構造函數'Throwable(String format,Object ... args)'。 –