要区分数组和泛型容器的功能,这里先要理解三个概念:协变性(covariance)、逆变性(contravariance)和无关性(invariant)。
若类A是类B的子类,则记作A ≦ B。设有变换f(),若:
当A ≦ B时,有f(A)≦ f(B),则称变换f()具有协变性;
当A ≦ B时,有f(B)≦ f(A),则称变换f()具有逆变性;
如果以上两者皆不成立,则称变换f()具有无关性。
在Java中,数组具有协变性,而泛型具有无关性,示例代码如下:
Object[] array = new String[10];
//编译错误
ArrayList