2013-01-18 61 views
1

我試圖一類T類型映射到ArrayListT類型:Java映射類的ArrayList

Map<Class<?>, ArrayList<?>> map_ = new HashMap<Class<?>, ArrayList<?>>(); 

的問題是,我不能添加一個項目從本地圖檢索的Arraylist

map_.put(A.class, new ArrayList<A>()); 
A item = new A(); 
map_.get(item.getClass()).add(item); //failure! 

我該如何構建我的地圖,以便我可以訪問並添加到它包含的數組列表?

+1

看一看[Java Tutorials:Wildcards](http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html) –

+1

您不能安全地進行此類操作。接受需要在某處進行未經檢查的投射。 –

+1

相關:http://stackoverflow.com/questions/1473444/can-generics-allow-the-java-compiler-to-check-the-type-of-keys-and-values-in-am/1473482#1473482 –

回答

0

更改您的聲明:

Map<Class<?>, List<Object>> map_ = new HashMap<>(); 

你將不得不投,當你get從列表中因爲你不能定義Java中的Map<Class<T>, List<T>> forAll T,也就是說,沒有辦法涉及的類型參數,所以你不得不使用像上面那樣的定義來進行你想要的操作。

+1

你不能從'List '投到'List ' – newacct

+0

@newacct我不是故意拋出'List',我的意思是將從'get'返回的元素投到'List '上。 –

+0

是的,我認爲Louis Wasserman是對的 - 我將不得不執行一些可怕的不加控制的演員。 –