2015-10-06 87 views
3

如何清單列表轉換。我試圖通過如何轉換列表<Object>列出<Dog>在Java中

List<Object> obj = (some initialization) 
List<Dog> dog =(List<Dog>)obj; 

這樣做所以這會引發錯誤

ERROR: Cannot cast from List<Object> to List<Dog> 

List<Object> 

我從Hibernate查詢

FROM DOG 
+0

如果您正在使用Hibernate使用TypedQuery – proudandhonour

+2

射擊狗。成爲對象。 – ErrorNotFoundException

+0

[具體類型之間鑄造(http://bayou.io/draft/Wildcard_Case_Studies.html#Casting_Between_Concrete_Types) – ZhongYu

回答

2

演員的工作,如果你使用一個List<?>代替:

List<?> list = (some initialization); 
List<Dog> dog = (List<Dog>)list; 

如果你有一個List<Object>你仍然可以將它轉換爲一個List<Dog>

List<Object> list = (some initialization); 
List<Dog> dog = (List)list; 

當然,這應該只在您確定列表中確實包含Dog對象(例如作爲來自您的HQL查詢FROM Dog的結果值)。

+2

很容易,你可能會得到這樣一個一定的警示作用...像選中投如果我沒有記錯 –

+1

@Parker_Halo是的,當你施放對象也收到相同的警告狗 – wero

+0

你確定嗎?我只是在我的Eclipse中嘗試過它,並沒有給出任何警告...... –

6

迭代獲得過List<Object>和投每個項目明確地

List<Dog> dog = new ArrayList<Dog>; 
for (Object o : obj) 
    dog.add((Dog) o); 
+1

會不會是有效的,如果將不得不遍歷的超過一萬項列表中? –

+0

@SyedHassan我剛剛嘗試了20000個被轉換成String的對象,並花了4毫秒。所以我認爲它應該足夠快;) –

+1

如果列表包含非狗,這會失敗,出現一個'ClassCastException',否則它也可以安全地簡單地轉換列表(請參閱我的答案),而不需要創建副本列表。 – wero