Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型:创建扩展Throwable的类对象集合_Java_Generics - Fatal编程技术网

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方法的调用中指定类型来编译它,而无需强制转换:


Collection
Arrays.asList(MyOwnException.class)
被推断为具有类型
List
,该类型与
List不兼容。这是不正确的,它们必须“完全相同”:
List x=new ArrayList()Class@Raffaele因为类型是从
asList
as
Class
的参数推断出来的,但是您需要它是不同的,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);