[英]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.