【发布时间】:2012-10-05 14:10:51
【问题描述】:
以下方式创建arraylist有什么区别?
List listA = new ArrayList(); and ArrayList alist = new ArrayList();
【问题讨论】:
标签: java list collections arraylist
以下方式创建arraylist有什么区别?
List listA = new ArrayList(); and ArrayList alist = new ArrayList();
【问题讨论】:
标签: java list collections arraylist
第一个将列表分配给由其接口定义的变量,第二个按类定义变量。
第一个声明将让您稍后更改实现:
List listA = new LinkedList();
是有效的,而第二个不会让你改变实现:
ArrayList listA = new LinkedList(); // <<<=== INVALID
值得注意的是,从Java 5开始List是泛型类型,所以应该指定类型参数来提高类型安全性:
List<ClassA> listA = new ArrayList<ClassA>();
【讨论】:
在第一种情况下,您使用listA 将列表的实现隐藏到代码中。
这通常是推荐的,因为它(几乎)可以确保您以后可以更改为另一种类型的列表,而无需检查代码其他部分的依赖关系:使用 listA 的代码不使用特定于 ArrayList 的任何内容类,但仅限于 List 接口中定义的内容。
【讨论】:
这是一个被广泛讨论的问题:)
您应该使用接口而不是具体类,因为您可以在任何时间点轻松更改实现
只有在你想访问具体类的特定功能时才应该使用该类
【讨论】:
都是一样的,只是引用类型不同。
在引用对象时,您应该始终使用接口(如 List),而不是像 ArrayList 这样的具体实现。
【讨论】: