java - ArrayList 之间的区别a = new ArrayList<>(); 并列出a = new ArrayList<>();
问题描述
我想知道,这两者之间有什么区别:
ArrayList<Integer> a = new ArrayList<>();
和List<Integer> a = new ArrayList<>();
另外,我想知道这两者的区别,ArrayList a = new ArrayList();
解决方案
从概念上讲,这两个语句在代码时间(当您编程时)和编译时间方面有所不同。
当您声明变量的更深(就继承而言)类型时,您根本不会丢失任何东西。因此,您可以使用 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 类型,也不建议这样做。
推荐阅读
- python - 使用 django-comments-xtd 时无法加载评论表单
- android - 具有默认值的伴随对象和函数
- python - 双向udp通信在python中不起作用
- ubuntu-16.04 - 如何解决 In-memory PM2 is out-of-date
- node.js - 如何在nodejs的导航栏上显示当前用户名
- python - 点列表中坐标的哪个轴[NumPy]
- python - 在 OpenCV 中设置帧位置永远不会起作用
- python - 将来自单个观察的患者内部数据写入多个文本文件
- onlyoffice - OnlyOffice转换api不断返回-1
- javascript - 未捕获的类型错误:无法读取未定义的属性“播放”