为什么数组是协变的,而泛型是不变的?
来自Joshua Bloch的 Effective Java,
- 数组在两个重要方面与泛型类型不同。第一个数组是协变的。泛型是不变的。
-
协变简单地表示如果 X 是 Y 的子类型,则 X[] 也将是 Y[] 的子类型。数组是协变 的 字符串是 Object So 的子类型
String[] is subtype of Object[]
不变量只是意味着无论 X 是否是 Y 的子类型,
List<X> will not be subType of List<Y>.
我的问题是,为什么决定在Java中使数组协变?还有其他SO帖子,例如为什么数组是不变的,但列表协变?,但它们似乎集中在Scala上,我无法遵循。