Java 多态性(ArrayList 和 List)

标签 java polymorphism

I was looking at this old question and its chosen answer.

最初选择的答案是,

ArrayList<ArrayList<Individual>> group = new ArrayList<ArrayList<Individual>>(4);

但后来修改为推荐这个

List<List<Individual>> group = new ArrayList<List<Individual>>(4);

我在页面上没有看到对此的解释,有人可以解释为什么推荐第二个而不是第一个吗? (我假设它与多态性有关)

最佳答案

这是接口(interface)代码。在这里您可以看到分配是对 List 接口(interface)完成的,而不是对实现 List 的 ArrayList 类完成的。 ArrayList、LinkedList 都实现了 List 接口(interface),同样的,你也可以拥有自己的 List 实现类。因此,将来如果您想以这样的方式更改实现,而不是 ArrayList 对象,而是需要其他 List 实现(例如 LinkedList),那么您可以轻松地修改这样的代码 -

 List<List<Individual>> group = new ArrayList<List<Individual>>(4); 
 to
 List<List<Individual>> group = new LinkedList<List<Individual>>(4)

此更改不会对使用组变量的代码的其他部分产生影响,因为这是一个 List 对象,而不是 Arraylist 或 LinkedList 对象。它不会破坏您的代码,您也不必浪费时间修改代码来适应此更改。

关于Java 多态性(ArrayList 和 List),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35922969/

相关文章:

language-agnostic - 参数值(不是类型)的多态性?

rust - Blanket impl、HRTB 和 "impl"抽象返回类型 : "expected bound lifetime parameter"

java - 如何判断 SWT Shell 是通过编程方式关闭还是由用户关闭?

java - 字符串相乘

java - 您可以使用 Java 8 编译一个类,然后在 Java 7 中使用它吗?

构造函数中的 Java 数组不起作用

java - Eclipse 生成 getters 和 setters 不封装

c++ - std::vector 类型引用的无效初始化

c# - 泛型中的多态性

一个列表中的 C# 不同类对象