【问题标题】:Java ArrayList, access method to return ArrayList of abstract classJava ArrayList,访问方法返回抽象类的ArrayList
【发布时间】:2015-11-06 15:14:21
【问题描述】:

我有一个 ArrayList 包含从抽象类派生的对象,有没有办法返回抽象类类型的数组列表,然后使用多态性,能够引用源对象?

我能看到的唯一方法是创建一个抽象类类型的ArrayList,然后将原始ArrayList 中的元素复制到其中,但我不想要副本。

【问题讨论】:

  • 发布您的代码,并准确告诉我们您想要做什么,而您所拥有的却无法做到。

标签: java class arraylist abstract


【解决方案1】:

假设你的具体类是Integer,你的抽象类是Number

如果您愿意接收作为List<Number> 而不是ArrayList<Number> 的结果转换(无论如何都是一个好习惯),您可以执行以下操作:

List<Integer> listOfConcrete = new ArrayList<>(); // your actual list
List<Number> listOfAbstract = listOfConcrete.stream()
  .map(n -> (Number) n)
  .collect(Collectors.toList());

您需要在 map() 调用中进行显式转换,以便正确执行转换。

【讨论】:

  • 哇,这很快,我用了你的例子,效果很好,我的方法看起来像这样: public ArrayList alobjGetPollSchedule() { retrurn (ArrayList)malobjPollSchedule.stream() .map(n -> (clsPoll)n).collect(Collectors.toList()); }
  • 不,您不需要在map 中显式转换。实际上,您根本不需要 map 步骤。 listOfAbstract = listOfConcrete.stream().collect(Collectors.toList()); 就足够了。但是您甚至不需要 Java 8 来复制列表:List&lt;Number&gt; listOfAbstract = new ArrayList&lt;&gt;(listOfConcrete); 也可以。
  • 如果目标是使用 List 作为数字,也许只需要List&lt;? extends Number&gt; listOfAbstract = listOfConcrete;,它不需要任何副本。但是OP应该真正澄清一下,以便我们知道。
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 2020-07-03
  • 2015-01-29
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-11-01
  • 2016-06-28
相关资源
最近更新 更多