摘自Joshua Bloch的Effective Java,
String[] is subtype of Object[]
不变式仅表示X是否为Y的子类型,
List<X> will not be subType of List<Y>.
我的问题是,为什么决定在Java中使数组协变?还有其他SO帖子,例如Why are Arrays invariant, but Lists covariant?,但它们似乎集中在Scala上,我无法关注。
最佳答案
通过wikipedia:
这回答了以下问题:“为什么数组是协变的?”或更准确地说,“为什么数组在当时是协变的?”
引入泛型后,由于this answer by Jon Skeet中指出的原因,有意使它们无协变:
Wikipedia文章中描述的使数组协变的原始动机不适用于泛型,因为wildcards使得表达协方差(和相反方差)成为可能,例如:
boolean equalLists(List<?> l1, List<?> l2);
void shuffleList(List<?> l);