2011-10-13 57 views
1

我有以下問題:我有一個泛型類叫做Generic<A>和這個類的某些情況下,可以說當存儲在列表中時是否可以檢索泛型?

Generic<String> foo; 
Generic<Double> bar; 

,我把它們放到像這樣的列表:

List<Generic<?>> list; 
list.add(foo); 
list.add(bar); 

現在我想讀取返回A的方法,但是我只獲得Object作爲返回類型,並且我知道爲什麼,因爲?在列表的通用類型中。我也知道List<Generic<String>>是一個完全不同的類型比List<Generic<Double>> ...但是有什麼樣的List結構或泛型類型參數,我可以用來保持通用類的類型相同?它在我的程序中沒有問題投給我,因爲我還爲我的列表中的每個實例保存了一個ID,現在可以確定哪種類型在那裏,但這看起來有點髒......

回答

0

你必須在某個時刻投:(

一個很好的方式
+0

是的,我認爲這是唯一的方法 – reox

0

那麼,如果你想whant一個常見的類型,你應該使用Object或者一些包裝你的東西的類。如果你使用Object,那麼只需檢查你的方法中的對象instanceof你做的東西

0

你是否必須使用?或者你能否改變你的代碼來使用List<Generic<T>>來保持類型?

如果你想與一些內容初始化的List後檢查的類型,你可以使用list.get(0).getClass()獲得一些信息,但是這並不是真正的編程

+0

是的,我可以用什麼的getClass或的instanceof但是這是不是真的有什麼,我想......想我會用20種或更多目前存在的類型,即將是一個長,如果,例如lse如果列表... – reox

+1

不,不像instanceof你可以使用getClass保存類型,並使用一個新的實例檢查它== – Hachi

1

難道這個你正在尋找?:

public <T> T someMethod(List<Generic<T>> list){ 
     //Return an element from list 
} 
+0

好吧這和鑄造直接一樣好... – reox

+0

它不是那種骯髒的XD(你也必須編寫這個類型,但是這個方法可以被重用)。 –

相關問題