gpt4 book ai didi

java - ArrayList 的通用列表初始化

转载 作者:行者123 更新时间:2023-12-01 15:07:08 26 4
gpt4 key购买 nike

Possible Duplicate:
List versus ArrayList as reference type?

我在 StackOverflow 的某处读到:

List<String> foo = new ArrayList<String>();

是ArrayList初始化的最佳实践。这是:

ArrayList<String> foo = new ArrayList<String>();

应该避免。它是否正确?如果是的话有人可以解释一下为什么会这样吗?

谢谢,EG

最佳答案

这就是大多数开发人员使用ArrayList(包括我自己)的方式,并且是多态性的一般原则。您应该在类层次结构中尽可能使用最高的类/接口(interface),同时仍然可以使用所有功能。

通常,这会使您的代码更加灵活,并且您可以更轻松地切换实现,因为您知道使用 List 作为类型进行编程不会将您限制为使用仅在ArrayList 并且不适用于 LinkedList

例如,如果我这样做:

LinkedList<String> strings = new LinkedList<String>();
String s = strings.pop();

popLinkedList 独有的,因此我不能直接将其更改为 ArrayList。我还必须更改我的代码:

ArrayList<String> strings = new ArrayList<String>();
String s = strings.remove(strings.size() - 1);

但如果我只使用该接口(interface),我一开始就不会使用 pop,所以我可以将 strings 更改为我想要的任何实现通缉。

这在编程 API 时尤其重要。如果您的方法是公开访问的并且将由其他开发人员使用,那么您需要确保您没有限制您的方法采用的列表类型,除非您有充分的理由这样做,特别是因为他们 可能有充分的理由不想使用ArrayList

如果您除了迭代和添加/删除之外什么都不做,您甚至可以转到Collection。不过,在这里您开始失去上下文,因为 List 告诉您它可能包含重复项并且是手动排序的。但如果这不是特别重要并且您可以使用 Collection,您甚至可以将列表替换为 Set 的实现。

关于java - ArrayList 的通用列表初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12821287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com