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