V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zhanglintc
V2EX  ›  问与答

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

  •  
  •   zhanglintc · 2020-09-17 11:13:24 +08:00 · 1251 次点击
    这是一个创建于 1310 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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");
    
    9 条回复    2020-09-17 14:37:06 +08:00
    zhanglintc
        1
    zhanglintc  
    OP
       2020-09-17 11:50:39 +08:00
    半天了, 连个打酱油的人都没有么... 这问题是太麻烦了, 还是太无聊了? ...
    EXChen
        2
    EXChen  
       2020-09-17 11:53:51 +08:00
    @zhanglintc 是的,4-6 这种写法是有风险的,因为你可以往 list 里面存一些不是你预期的类型。
    lxk11153
        3
    lxk11153  
       2020-09-17 11:57:31 +08:00
    我选择 res2
    xgfan
        4
    xgfan  
       2020-09-17 11:57:42 +08:00
    太无聊了。
    xgfan
        5
    xgfan  
       2020-09-17 11:58:11 +08:00
    3,没有什么影响,最好不要这样做。
    lxk11153
        6
    lxk11153  
       2020-09-17 12:04:01 +08:00
    var res1 = new ArrayList<Integer>(); 怎么样 [doge]
    jasonding
        7
    jasonding  
       2020-09-17 14:23:46 +08:00
    始终使用第一种写法
    vate32
        8
    vate32  
       2020-09-17 14:30:09 +08:00
    List res4 这种定义变量和 new ArrayList()这种新建对象方式,没有尖括号是历史原因,没有指定泛型类型,现在已经非常不推荐这么写了,如果使用的话 idea 都会警告。在 java8 的环境下推荐使用 List<Integer> res2 = new ArrayList<>()这种方式,new ArrayList<>()这个尖括号内的类型是省略了,因为等号左边已经有了,会进行类型推断。
    zhanglintc
        9
    zhanglintc  
    OP
       2020-09-17 14:37:06 +08:00
    @vate32 #8 嗯, 目前看来 List<Integer> res2 = new ArrayList<>(); 是最简单而且没有问题的写法.
    其实 res3 我感觉除了有个警告外, 好像也没问题. 当然了, 我不会这么写的.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1017 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:09 · PVG 03:09 · LAX 12:09 · JFK 15:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.