2

可能重复:
List 与 ArrayList 作为引用类型?

通过以下方式创建数组列表有什么区别?

List listA = new ArrayList(); and ArrayList alist = new ArrayList();
4

4 回答 4

11

第一个将列表分配给由其接口定义的变量,第二个按类定义变量。

第一个声明将允许您稍后更改实现:

List listA = new LinkedList();

是有效的,而第二个不允许您更改实现:

ArrayList listA = new LinkedList(); // <<<=== INVALID

值得注意的是,Java 5 开始List是泛型类型,所以应该指定类型参数来提高类型安全性:

List<ClassA> listA = new ArrayList<ClassA>();
于 2012-10-05T14:12:27.583 回答
5

在第一种情况下,您将列表的实现隐藏到使用listA.

这通常是推荐的,因为它(几乎)确保您以后可以更改为另一种类型的列表,而无需检查代码其他部分的依赖关系:代码 usinglistA不使用特定于类的任何内容,而只使用接口ArrayList中定义的内容List.

于 2012-10-05T14:11:48.137 回答
0

这是一个讨论得很远的问题:)

您应该使用接口而不是具体类,因为您可以在任何时间点轻松更改实现

当您想要访问该类的特定功能时,您应该只使用具体类

于 2012-10-05T14:12:43.457 回答
0

都是一样的,只是引用类型不同。

在引用对象时,您应该始终使用接口(如 List)而不是像 ArrayList 这样的具体实现。

于 2012-10-05T14:12:46.047 回答