Java 泛型的这几种写法有啥区别?

2020-09-17 11:13:24 +08:00
 zhanglintc

下面这些写法编译都没问题, 有啥具体的区别吗?

List<Integer> res1 = new ArrayList<Integer>();
List<Integer> res2 = new ArrayList<>();
List<Integer> res3 = new ArrayList();

List res4 = new ArrayList<Integer>();
List res5 = new ArrayList<>();
List res6 = new ArrayList();

目前知道的, res2 应该是 1.7 以后, res1 写法的简略, 所以二者应该是一样的.

那 res3 和 res2 有区别么?

res4 ~ res6 看起来没有任何泛型的效果, 特别是 res4 依然是可以添加 String 类型的元素的:

res4.add("abc");
1258 次点击
所在节点    问与答
9 条回复
zhanglintc
2020-09-17 11:50:39 +08:00
半天了, 连个打酱油的人都没有么... 这问题是太麻烦了, 还是太无聊了? ...
EXChen
2020-09-17 11:53:51 +08:00
@zhanglintc 是的,4-6 这种写法是有风险的,因为你可以往 list 里面存一些不是你预期的类型。
lxk11153
2020-09-17 11:57:31 +08:00
我选择 res2
xgfan
2020-09-17 11:57:42 +08:00
太无聊了。
xgfan
2020-09-17 11:58:11 +08:00
3,没有什么影响,最好不要这样做。
lxk11153
2020-09-17 12:04:01 +08:00
var res1 = new ArrayList<Integer>(); 怎么样 [doge]
jasonding
2020-09-17 14:23:46 +08:00
始终使用第一种写法
vate32
2020-09-17 14:30:09 +08:00
List res4 这种定义变量和 new ArrayList()这种新建对象方式,没有尖括号是历史原因,没有指定泛型类型,现在已经非常不推荐这么写了,如果使用的话 idea 都会警告。在 java8 的环境下推荐使用 List<Integer> res2 = new ArrayList<>()这种方式,new ArrayList<>()这个尖括号内的类型是省略了,因为等号左边已经有了,会进行类型推断。
zhanglintc
2020-09-17 14:37:06 +08:00
@vate32 #8 嗯, 目前看来 List<Integer> res2 = new ArrayList<>(); 是最简单而且没有问题的写法.
其实 res3 我感觉除了有个警告外, 好像也没问题. 当然了, 我不会这么写的.

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

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

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

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

© 2021 V2EX