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/