关于创建Class泛型数组

已知
[code="java"]
public class B implements A(){};
public class C implements A(){};

[/code]
为什么下面的代码不能编译通过
[code="java"]Class<? super A>[] claszz = new Class<? super A>[]{ B.class, C.class };[/code]
假如不使用泛型则可以编译通过
[code="java"]Class[] claszz = new Class[]{ B.class, C.class };[/code]
求解析

楼主的问题类似以下问题,

ArrayList[] intValues1 = new ArrayList[5];

ArrayList[] intValues2 = new ArrayList[5];

ArrayList> intValues3 = new ArrayList>();

第一条语句是编译不通过的,第二条语句能通过的但是会包报类型不安全异常,第三种是完全通过编译的

第一条语句简单的说就是泛型和数组不能共存,但是说可以使用List代替数组来创建

ArrayList> intValues4 = new ArrayList>();

不应该是这样吗?
[code="java"]
Class<? extends A>[] claszz = new Class<? extends A>[]{ B.class, C.class };
[/code]

你是java的程序,是不支持泛型数组的直接创建的。使用下面的方式:
[code="java"]
//java是不支持范型数组的,think in java里面讲过啊,底层的数组类型只能是object的.
//不过可以通过java反射来实现啊!
import java.lang.reflect.*;
public class GenericArray{
private T[] array;
public GenericArray(Class type,int size){
array = (t[])Array.newInstance(type,size);
}
public void put(int index,T item){
array[index]=item;
}
public T get(int index){
return array[index];
}
}
[/code]

java不支持你写的那种泛型数组,thinking in java里面写过,可以去书中找下原因,泛型的出现就是为了解决类型安全问题,那样创建数组是会破坏类型安全的

你要定义的是数组,而数组是不支持泛型的检查的,你给他加上泛型编译器反倒没法识别,当然就编译错误了,此处你定义的类型就是数组,而不是Class。
看看API,java中并不是每一种类型都支持泛型的,支持泛型是声明泛型了才能支持泛型。