泛型不执行类型擦除

时间:2017-06-27 06:54:42

标签: java generics

以下代码抛出java.lang.ArrayStoreException异常。据我所知,编译器应该在我使用generics时生成错误或警告。

请检查下面的代码并找到注释行。

   public class Test1 {
        public static void main(String[] args) {
            Collection<Number> nums = new ArrayList<Number>();
            nums.add(new Integer(1));
            nums.add(new Long(-1));
            //every thing is fine here
            Number[] aa = nums.toArray(new Number[0]);
            for (Number num : aa) {
                System.out.println(num);
            }
            // Even if generics are there,no warning or error is reported by complier
            Integer[] bb= nums.toArray(new Integer[nums.size()]);
            for (Integer integer : bb) {
                System.out.println(integer);
            }

        }

    }

请帮助我理解这种行为。你能帮我理解如何解决这个问题吗?

1 个答案:

答案 0 :(得分:7)

Collection.toArray()方法定义为:

<T> T[] toArray(T[] a);

意味着类型参数T仅将参数类型绑定到返回值的类型。它独立于封闭类的任何类型参数(E的情况下,元素类型为Collection