今天在看书的时候看到了数组协变性,第一次看到,记录下!
首先是概念 协变性(covariant) :如果类Base是类Sub的父类,那么Base[]就是Sbu[]的父类
Object[] ob = new String[10];
ob[5] = 10;
上面代码运行时是会报错:
Exception in thread "main" java.lang.ArrayStoreException: java.lang.Integer
通过资料 了解到Java设计之初,人们想给它做泛型,但是没时间做,所以把数组设计成协变了,这样也导致了无穷的后患。
作对比而言,我们还需要了解泛型是不可变的(invariant)
// List<Object> list = new ArrayList<String>();
上面代码编译时就会报错!!
这些表现说明了Java中数组是具体化(reified),而泛型在运行时是被擦除的(erasure)
记录点点滴滴,爱Java,爱生活!