为什么数组是协变的,但是泛型是不变的?
来自约书亚·布洛赫的有效Java,
- 数组与泛型类型有两种重要的区别。首先,数组是协变的。泛型是不变的。
协变简单地表示,如果X是Y的子类型,那么X[]也将是Y[]的子类型。数组是协变量的,因为字符串是对象的子类型,所以
String[] is subtype of Object[]
不变的意思是不管X是不是Y的子类型,
List<X> will not be subType of List<Y>.
我的问题是,为什么决定在Java中使数组协变?还有其他这样的帖子,比如为什么数组是不变的,但是列表是协变量的呢?,但他们似乎专注于Scala,我无法理解。