最近学习jdk1.8源码时,发现ArrayList(Collection<? extends E> c)这个构造函数中,有句有意思的描述:c.toArray might (incorrectly) not return Object[] (see 6260652),
做了一些实验后均没能解释why!而后发现通过正常方式创建的Collection参数都是不会有问题的,问题出在这个Collection参数如果通过某些方式创建得到,就会出现如题的问题!
public static void main(String[] args) { Integer[] array = {1, 2}; // 通过Arrays转换成的List,保留了原本的类型 List list = Arrays.asList(array); // 即使再将其转换为Object类型的数组,还是原本的类型 Object[] array3 = list.toArray(); System.out.println("通过数组转换:" + (array3.getClass() == Object[].class)); // 如果是创建的集合,则类型可以转换 List<Integer> li = new ArrayList<Integer>(); System.out.println("通过集合转换:" + (li.toArray().getClass() == Object[].class)); }
运行结果: