List list=new ArrayList 写法的意义是什么

2022-01-20 11:24:11 +08:00
 HuPu
List list=new ArrayList 相比于 ArrayList list=new ArrayList 写法的意义是什么
8950 次点击
所在节点    Java
94 条回复
golangLover
2022-01-20 11:25:09 +08:00
面向接口编程
HuPu
2022-01-20 11:25:28 +08:00
有人说换成 linkedList 要改的地方少
List list=new ArrayList 只能用 list 的功能 那我 AL=new AL 要改成 linkedList 不也是只改一处吗
gabon
2022-01-20 11:25:46 +08:00
如果你想替换为 linkedlist 就可能不兼容了
HuPu
2022-01-20 11:25:46 +08:00
@golangLover 你好 有没有具体的例子
chendy
2022-01-20 11:26:12 +08:00
局部变量无意义,成员 /全局变量用 List
new ArrayList<String>().var 自动补全出来就完事了
HuPu
2022-01-20 11:26:58 +08:00
@gabon 只用 List 的方法 用不到 AL 的方法 为啥会不兼容
micean
2022-01-20 11:27:24 +08:00
少写 5 个字母
johnj
2022-01-20 11:28:28 +08:00
Java 讲究面向接口编程。所有依赖的对象,都用接口去引用而非实现类。

作为新手先记住规则,这时候你不理解很正常,缺乏背景和实际经验很难能理解好处。
chengyiqun
2022-01-20 11:30:41 +08:00
通常出现在一个组件的构造函数或者返回参数时注意下就行.
构造函数或者函数形参用接口, 可以传入多种类型, return 就返回具体的类型.
X0ray
2022-01-20 11:31:01 +08:00
HuPu
2022-01-20 11:31:07 +08:00
@johnj 我也不算完全新手了。。。 我大一时候就不理解 现在工作一年了还是不理解。。。
HuPu
2022-01-20 11:31:50 +08:00
@X0ray 这说的是定义返回值类型的问题 和我问的不一样啊
Leviathann
2022-01-20 11:32:44 +08:00
我都用 var a = new ArrayList
chendy
2022-01-20 11:33:31 +08:00
面向接口是在参数返回值这样的地方
比如一个方法参数写死了 ArrayList ,然后 Collections.emptyList 或者 signotelList 或者 Arrays.asList 就都进不来了,写 List 就会好很多
返回值也类似,如果声明返回 ArrayList ,那么实现就必须返回 ArrayList 用不了其他的,同样换成接口会好很多

而局部变量本身就是具体的实现环节,不需要进一步抽象,ArrayList 就是 ArrayList ,写 List 并没有啥用
更何况 java 里 99%都是 ArrayList ,换其他实现类明显也是为了其他实现类的特性,所以应该是用具体类型
liuzhaowei55
2022-01-20 11:33:44 +08:00
其实好多的面向接口编程,有些接口活了一辈子也不见得有第二个实现。
X0ray
2022-01-20 11:33:50 +08:00
@HuPu 是一个意思。getXXX() -----> = new xxx;
Bromine0x23
2022-01-20 11:34:44 +08:00
限定只能用 List 的方法。
只用和只能用还是有点区别的,这么写最大好处是防手滑。
gabon
2022-01-20 11:34:51 +08:00
@HuPu 但是如果用 arraylist 没办法保证不用除 list 接口定义的方法以外的方法。
gscsnm
2022-01-20 11:35:20 +08:00
ic2y
2022-01-20 11:37:57 +08:00
代码防御; 可以让后面调用的人,只能调用接口声明的方法,而不会误调用 具体实现的某些公开方法。

在后续,如果要切换具体的实现,只要替换 new ArrayList 即可,对调用方无感知。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/829411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX