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