2015-10-06 38 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

相关问题