+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自动为你确定正确的列表类型。” –