【问题标题】:How to convert List<Object> to List<Dog> in Java [duplicate]如何在 Java 中将 List<Object> 转换为 List<Dog> [重复]
【发布时间】:2016-01-03 08:48:08
【问题描述】:

如何将列表转换为列表。我试着这样做

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

所以这会引发错误

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

在哪里

 List<Object> 

我从休眠查询中得到

FROM DOG 

【问题讨论】:

标签: java hibernate list object casting


【解决方案1】:

遍历List&lt;Object&gt; 并明确地转换每个项目

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

【讨论】:

  • 如果必须迭代超过一万个项目的列表会有效吗?
  • @SyedHassan 我刚刚尝试了 20000 个对象,这些对象被转换为String,花了 4 毫秒。所以我认为它应该足够快;)
  • 如果列表包含非狗,这将失败并显示ClassCastException,否则也可以安全地简单地转换列表(请参阅我的回答),而无需创建列表的副本。
  • @wero 是的,但 SyedHassan 从休眠查询中获取对象,正如他所说,应该没问题!
  • 您还可以创建一个只读包装器List&lt;Dog&gt;,它在get() 期间检查类型。通过子类化AbstractList 这很容易
【解决方案2】:

如果您使用 List&lt;?&gt; 代替,演员表有效:

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

如果您有 List&lt;Object&gt;,您仍然可以将其转换为 List&lt;Dog&gt;

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

当然,只有当您确定列表确实包含 Dog 对象(例如,作为 HQL 查询的结果值 FROM Dog)时,才应该这样做。

【讨论】:

  • 你可能会从这个得到一些警告......如果我没记错的话,就像未经检查的演员表
  • @Parker_Halo 是的,当您将 Object 转换为 Dog 时也会收到相同的警告
  • 你确定吗?我只是在我的 Eclipse 中尝试过它并没有给出任何警告......
  • 它给了我警告,但我认为我应该忽略它,因为我正在从休眠查询中获取记录。
  • @Parker_Halo 你是对的,它没有
猜你喜欢
  • 2021-08-08
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-11-27
  • 2013-04-01
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多