首页 > 解决方案 > ArrayList 之间的区别a = new ArrayList<>(); 并列出a = new ArrayList<>();

问题描述

我想知道,这两者之间有什么区别:

ArrayList<Integer> a = new ArrayList<>();List<Integer> a = new ArrayList<>();

另外,我想知道这两者的区别,ArrayList a = new ArrayList();

标签: javaarraylist

解决方案


从概念上讲,这两个语句在代码时间(当您编程时)和编译时间方面有所不同。

当您声明变量的更深(就继承而言)类型时,您根本不会丢失任何东西。因此,您可以使用 ArrayList 的所有方法并查看 IDE 提供的文档。

当您声明变量的浅(就继承而言)类型时,您“擦除了它的实际类型”。但不是真的。在运行时,您可以使用反射来恢复它:

List<Integer> simpleList = new ArrayList<>();
System.out.println(simpleList.getClass().getName());
// java.util.ArrayList

仍然当您使用列表时,它的行为类似于 ArrayList(因为它是 ArrayList)。但是现在你把它当作 List 来使用(在 SOLID 中代表 L:Liskov 替换原则)。

但是,如果您声明一个函数,请不要使用 ArrayList,因为没有人能够传递 LinkedList(ahah, Kidding) 或 Deque 或 Arrays.ArrayList 或任何他们会使用的东西。

ArrayList a = new ArrayList();等于ArrayList<Object> a = new ArrayList<>();

这称为参数化类的原始使用。即使您希望 ArrayList 是 Object 类型,也不建议这样做。


推荐阅读