2011-05-23 42 views
2

可能重複:
What is the easiest alternative to a generic array in Java?泛型列表和通用陣列

我有以下代碼:

class B<X> 
{ 
    public void create() 
    { 
     List<X> l1 = new ArrayList<X>(); //No ERROR 

     X[] arrr = new X[10]; //ERROR 
    } 
} 

我知道,我不能實例化一個通用陣列因類型擦除。但爲什麼我可以實例化一個通用List的實例?

+0

可能的重複[什麼是最簡單的替代Java中的泛型數組?](http://stackoverflow.com/questions/383888/what-is-the-easiest-alternative-to-a-generic-array -in-java)或者(http://stackoverflow.com/questions/5626867/generic-class-to-array-of-generics-of-same-generic-type) – 2011-05-23 09:43:32

+1

我想我理解這個問題。如果'new ArrayList ();'實質上被視爲'new ArrayList ();'由於類型擦除,爲什麼'new X [10];'不像'new Object [10];'處理? - 或者相反,如果Java無法處理數組,它如何處理列表? – 2011-05-23 09:54:07

+0

@Alan,謝謝。這就是我所問的。 – 2011-05-23 10:01:20

回答

5

的原因是,泛型使用類型擦除實施:

沒有類型X在運行時知道。這意味着你不能實例化一個數組(未知類型)。

但是由於您不需要(並且實際上不能使用)在運行時創建參數化類型的類型信息(再次:type erasure),創建ArrayList<X>不是問題。

需要注意的是內部的ArrayList總是使用的Object[]用於實際存儲,無論類型參數是什麼。