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

2022-01-20 11:24:11 +08:00
 HuPu
List list=new ArrayList 相比于 ArrayList list=new ArrayList 写法的意义是什么
8662 次点击
所在节点    Java
94 条回复
HuPu
2022-01-20 11:38:35 +08:00
是不是这个意思 我从一开始 List=new AL 下面我每次用到 list 的时候都不会碰 AL 专属的方法。 如果我 AL=new AL 了 就可能不小心用了一个 AL 专属方法

以后再改成 linkedList 就不好改了
Leviathann
2022-01-20 11:39:45 +08:00
@HuPu java collection framework 作者的原话

Does anyone actually use LinkedList? I wrote it, and I never use it.
thinkershare
2022-01-20 11:40:18 +08:00
如果实在局部方法里面, 这样写完全没啥用, 你想怎么搞都行, 因为你要自己对这个方法负责, 除非你要显示的指明, 此处接口需要收缩, 才需要这么搞, 否则只有在 API 接口上收缩对象的对外接口才有意义!
HuPu
2022-01-20 11:41:44 +08:00
@chendy 对 参数返回值这种用 List 我可以理解 但是这种新建变量的一直不太理解
yazinnnn
2022-01-20 11:43:23 +08:00
这么写没意义
HuPu
2022-01-20 11:43:44 +08:00
@Bromine0x23 是不是这个意思 我从一开始 List=new AL 下面我每次用到 list 的时候都不会碰 AL 专属的方法。 如果我 AL=new AL 了 就可能不小心用了一个 AL 专属方法
RainyH2O
2022-01-20 11:44:16 +08:00
因为和有序可重复列表同一级别的抽象是:有序不可重复列表、无序不可 /可重复列表以及有序性、重复性组合的集合、关联数组等。
而数组实现、链表实现这些只是上述高级抽象的低一级实现。
用同级别的抽象描述功能可做到关注点分离。
why1001
2022-01-20 11:45:53 +08:00
可以看看设计模式,有帮助于理解
yazinnnn
2022-01-20 11:46:41 +08:00
反正现在大家也是偏向 fp 写业务,你返回啥 list 的实现都是 list.stream().巴拉巴拉了,返回值类型也可以不关心了
nvkou
2022-01-20 11:53:56 +08:00
强类型就是这样的了。
说白了是为了工程,各部之间约定接口而不关心实现。不然你实现类完工前我就不用开工了?
强类型系统有很多限制,用接口,继承,泛型补足一定的灵活性。不然更加啰嗦
banmuyutian
2022-01-20 11:55:10 +08:00
需要用特定接口的时候再用第二种写法呗,10 楼里的讨论很清楚了
Cbdy
2022-01-20 11:55:22 +08:00
var list = new ArrayList() > List list = new ArrayList() > ArrayList list = new ArrayList()

节省了键盘寿命
AoEiuV020CN
2022-01-20 11:59:44 +08:00
我觉得是反过来的,List list=new ArrayList 这就可以的情况,为什么你会想写 ArrayList list=new ArrayList
whenov
2022-01-20 12:10:34 +08:00
@HuPu 用 List 之后,"不用 ArrayList 的方法"是由编译器保证的而不是由程序员保证的
zxxufo008
2022-01-20 12:13:16 +08:00
我理解的工作一年的还是 rookie
johnj
2022-01-20 12:19:04 +08:00
如果你的问题只是针对 List 这个类型,那回答就是这是无脑,最佳实践。

放大到所有类(接口),面向接口编程,一个明显的好处是方便依赖注入。注入的时候,可以替换接口的任何实现类。这样你的代码依赖的就是接口而不是具体实现。
leonme
2022-01-20 12:39:00 +08:00
@HuPu 先工作 10 年再说🐶
kaedea
2022-01-20 12:57:26 +08:00
Dependency Reverse
zhangchongjie
2022-01-20 13:09:28 +08:00
把多态看看吧
Vegetable
2022-01-20 13:24:30 +08:00
都说的很有道理,建议你用 var

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

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

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

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

© 2021 V2EX