Java泛型强转问题


public static void main(String[] args) {
    ArrayList<Integer> integers = new ArrayList<>();
    ArrayList<Object> objects = (ArrayList) integers; // 编译通过
    ArrayList<Object> objects = (ArrayList<Object>) integers; // 编译失败
}

请问为什么强转不带泛型编译通过,带上泛型反而还失败了?谢谢!

ArrayListArrayList<Object>不是同一种类型,前者是原始类型,是所有带泛型参数类型的父类型,后者不是。

Generic Array Creation,泛型数组创建时提示出错_luxinfeng666的博客-CSDN博客 起因前两天在刷leetcode时,遇到一个设计题,需要设计一个哈希集合,当时的想法就是创建一个链表数组,用链表来解决哈希冲突问题。然而在编写时,编译器报错,如下图所示。分析为什么会出现编译错误呢?这里就是泛型数组的问题了。在Java中,数组是支持协变(Covariant)的,而泛型是不可变(Invariant)的。当两者在一起的时候,就会出现问题。我们先来看看协变和不可变的定义协变:是指子类型关系在类型变换的作用下保持原样。逆变:指的是子类型关系在类型变换的作用下发生逆转。不可变:表示子 https://blog.csdn.net/luxinfeng666/article/details/114794030

泛型就是,数组里面只能是这个类型的数据,Integer只是Object的一种