java泛型数组的问题,来自<<thinking in java>> 1C

<>中代码

class Generic<T>{}
class ArrayofGenericReference{
    static Generic<Integer>[] gia;
}

上面代码编译不通过,但是去掉static改成Generic[] gia = new Generic[1];
后编译运行都没有问题。虽然书上说不能创建泛型数组,但是Generic[] gia = new Generic[1];却可以正常编译运行。请问为什么?

2个回答

我给你说一下,数组本来就定义了,要存放的类型了,比如 int[] abc 就说明里面放的就是int类型的,所以你这么写肯定不对了,把数组跟集合的区别看一下
就明白了。

因为Generic在编译阶段被认为是一个Object[ ],也就是Generic里面可以放一个int,也可以放一个person.class,当我们取出里面的int,并强制转换为person.class,调用它的输出时会怎样?java.lang.ClassCastException!这就违反了泛型引入的原则。所以,Java不允许创建泛型数组Generic[] gia = new Generic[1]; 只是开辟了堆的储存空间,并没有存放任何数据,当然编译正常了

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问