+1 为Reimeus 的回答。但是,如果您希望保留使用父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);
}