参数化阵列-直接访问与二传手

时间:2018-11-13 18:11:56

标签: java generics

我有一个类,其中包含一个包装的参数化数组:

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是对象的子类型,那么为什么代码无法按预期工作?

0 个答案:

没有答案