可能重复:
List 与 ArrayList 作为引用类型?
通过以下方式创建数组列表有什么区别?
List listA = new ArrayList(); and ArrayList alist = new ArrayList();
可能重复:
List 与 ArrayList 作为引用类型?
通过以下方式创建数组列表有什么区别?
List listA = new ArrayList(); and ArrayList alist = new ArrayList();
第一个将列表分配给由其接口定义的变量,第二个按类定义变量。
第一个声明将允许您稍后更改实现:
List listA = new LinkedList();
是有效的,而第二个不允许您更改实现:
ArrayList listA = new LinkedList(); // <<<=== INVALID
值得注意的是,Java 5 开始List
是泛型类型,所以应该指定类型参数来提高类型安全性:
List<ClassA> listA = new ArrayList<ClassA>();
在第一种情况下,您将列表的实现隐藏到使用listA
.
这通常是推荐的,因为它(几乎)确保您以后可以更改为另一种类型的列表,而无需检查代码其他部分的依赖关系:代码 usinglistA
不使用特定于类的任何内容,而只使用接口ArrayList
中定义的内容List
.
这是一个讨论得很远的问题:)
您应该使用接口而不是具体类,因为您可以在任何时间点轻松更改实现
当您想要访问该类的特定功能时,您应该只使用具体类
都是一样的,只是引用类型不同。
在引用对象时,您应该始终使用接口(如 List)而不是像 ArrayList 这样的具体实现。