+1 for Reimeus's answer。但是,如果您希望保留使用列表中的父Exception
類型中聲明,這是我能想出(使用Java 7語法)最好的:
private static final List<Class<? extends Exception>> SOME_ERRORS = new ArrayList<>();
static{
SOME_ERRORS.add(NumberFormatException.class);
SOME_ERRORS.add(NullPointerException.class);
}
你的問題是由於Arrays.asList
自動確定適合你的列表類型。爲了比較,這也是工作沒有錯誤:
private static final List<Class<? extends Exception>> SOME_ERRORS = Arrays.asList(NumberFormatException.class, NullPointerException.class, Exception.class);
特別處理「常量」(static final
S),你平時最好建議,以確保這些陣列/集不能被修改。在最壞的情況下,這可以節省運行到一些困難的問題。例如:
private static final List<Class<? extends Exception>> SOME_ERRORS;
static{
List<Class< ? extends Exception>> errors = new ArrayList<>();
errors.add(NumberFormatException.class);
errors.add(NullPointerException.class);
SOME_ERRORS = Collections.unmodifiableList(errors);
}
這讓我感到驚訝。只要我添加了編譯的FileNotFoundException.class代碼。我仍然覺得很奇怪,但我想我現在明白爲什麼它是這樣的。謝謝 –
接受你對這條信息的回答「你的問題是由於Arrays.asList自動爲你確定正確的列表類型。」 –