簡體   English   中英

泛型不執行類型擦除

[英]Generics not performing Type Erasure

以下代碼拋出了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);
            }

        }

    }

請幫助我理解這種行為。 你能幫我理解如何解決這個問題嗎?

Collection.toArray()方法定義為:

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

意味着類型參數T僅將參數類型綁定到返回值的類型。 它獨立於封閉類的任何類型參數(對於Collection的情況, E表示元素類型)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM