<>中代码
class Generic<T>{}
class ArrayofGenericReference{
static Generic<Integer>[] gia;
}
上面代码编译不通过,但是去掉static改成Generic[] gia = new Generic[1];
后编译运行都没有问题。虽然书上说不能创建泛型数组,但是Generic[] gia = new Generic[1];却可以正常编译运行。请问为什么?
我给你说一下,数组本来就定义了,要存放的类型了,比如 int[] abc 就说明里面放的就是int类型的,所以你这么写肯定不对了,把数组跟集合的区别看一下
就明白了。
因为Generic在编译阶段被认为是一个Object[ ],也就是Generic里面可以放一个int,也可以放一个person.class,当我们取出里面的int,并强制转换为person.class,调用它的输出时会怎样?java.lang.ClassCastException!这就违反了泛型引入的原则。所以,Java不允许创建泛型数组Generic[] gia = new Generic[1]; 只是开辟了堆的储存空间,并没有存放任何数据,当然编译正常了