我有一个类,其中包含一个包装的参数化数组:
public class CatContainer <T> {
T[] names;
public CatContainer(){
names=(T[]) new Object[10];
}
void set(int index, T value){
names[index]=value;
}
}
并有相应的客户端,我在这里使用两种方式访问数组。
CatContainer<String> cats=new CatContainer<>();
//cats.names[0]="Murzik";
//cats.set(0, "Murzik");
您能解释一下,为什么当我使用setter时,程序运行正常,但是当我使用直接访问cats.names[0]="Murzik"
时,程序会引发异常?
java.lang.ClassCastException:[Ljava.lang.Object;无法投射到 [Ljava.lang.String;
P.S。我有一个关于创建通用数组的解决方案-使用setter的方式可以正常工作。我正在搜索有关指定异常的解释。我不知道为什么当我使用直接访问数组时抛出了它。我知道java中的泛型在运行时没有指定的类型,并且所有参数都强制转换为Object类型。但是string是对象的子类型,那么为什么代码无法按预期工作?