Java泛型:创建扩展Throwable的类对象集合
为什么第一行行行得通,而第二行不行Java泛型:创建扩展Throwable的类对象集合,java,generics,Java,Generics,为什么第一行行行得通,而第二行不行 Collection<Class<? extends Throwable>> exs = new ArrayList<Class<? extends Throwable>>() {{ add(MyOwnException.class); }}; Collection<Class<? extends Throwable>> exs = Arrays.asList(MyOwnExcep
Collection<Class<? extends Throwable>> exs =
new ArrayList<Class<? extends Throwable>>() {{ add(MyOwnException.class); }};
Collection<Class<? extends Throwable>> exs = Arrays.asList(MyOwnException.class);
Collection泛型非常棘手
在本例中,Arrays.asList
将返回一个List
,这与List不同。如果第二个示例有效,它将允许这样的代码:
Collection<Class<? extends Throwable>> exs = Arrays.asList(MyOwnException.class);
exs.add(IOException.class);
Collection第一行之所以有效,是因为赋值的右侧的元素的类型(属于ArrayList
)是Class这是一个错误的原因,因为java推断了错误的类型,但是您可以通过在对typed方法的调用中指定类型来编译它,而无需强制转换:
CollectionArrays.asList(MyOwnException.class)
被推断为具有类型List
,该类型与List不兼容。这是不正确的,它们必须“完全相同”:List x=new ArrayList()你是对的,波西米亚人,我刚刚纠正了第二部分,那不是真的。很难快速回答。谢谢+但是我有个问题。为什么局部变量不定义为Class@Raffaele因为类型是从asList
asClass
的参数推断出来的,但是您需要它是不同的,Eclipse编译器会说List to List
Collection<Class<? extends Throwable>> exs
= Arrays.<Class<? extends Throwable>>asList(Exception.class); // compiles
Collection<? extends Class<? extends Throwable>> exs = Arrays.asList(MyOwnException.class);