0

我在某处读到我们应该像这样多态地实例化一个 ArrayList:

List myList = new ArrayList();

但如果我使用

ArrayList myList = new ArrayList(); 

这种方法我可以在输入时看到更多的方法myList.(ctrl+space)

请指导我了解它们之间的差异(利弊)

4

2 回答 2

4

通常,您对接口进行编码的原因是,如果有意义的话,您可以在以后换出您正在使用的具体类。例如,如果您因为发现内存碎片/重新分配问题而需要ArrayList交换LinkedList。您只需要更改构造对象的行,而不是您的其他代码,因为您对List接口进行了编码,并且这两个具体类都实现了List.

如果您需要使用接口ArrayList上没有的方法之一List,则可以更改声明并使用该方法。那么,您只需要注意,您将代码紧密耦合到ArrayList一个特定的具体类,而不是List一个由各种类实现的接口。

您的默认位置应该是对接口进行编码,因为这可以为您提供最大的灵活性/最小的耦合。但这并不意味着您在需要时不直接使用该类,只是您开始尽可能灵活。

于 2013-02-10T09:56:08.173 回答
0

如果您使用您建议的方法,您将严格执行容器的特定实现,这在许多情况下都不好。如果您需要使用仅存在于中的方法,则ArrayList有两个选项 - 声明myList为,或在您需要仅在 中找到的方法时ArrayList向下转换。myListArrayList

于 2013-02-10T09:57:33.670 回答