Tag: 语言设计

为什么数组是协变的,但泛型是不变的?

来自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帖子,比如为什么数组是不变的,但是列表是协变的? ,但他们似乎集中在斯卡拉,我不能遵循。