在JDK 8中设置/列出初始化语法

时间:2015-07-03 14:00:46

标签: java list set java-8

在JDK 8中,编译器建议省略此

    function myFunction() {
        if (sessionStorage.getItem('colour')) {
            document.body.style.backgroundColor = sessionStorage.getItem('colour');
        }else{
            document.body.style.backgroundColor =  "#BB0A21";
            sessionStorage.setItem('colour', "#BB0A21");
        }
    }

  // then you'll need to call your function on page load
  myFunction();

到此

If($("#city").val() == ""){
  console.log("");
}else{
 // your code
}

将第二个ArrayList<String> someList = new ArrayList<String>(); 标记为多余。

但是,即使像这样完全省略了菱形运算符,编译器也不会抱怨

ArrayList<String> someList = new ArrayList<>();

这似乎在运行时没有任何问题。钻石操作员与没有钻石操作员之间是否有任何具体差异?如果有人可以详细说明,我真的很感激。

2 个答案:

答案 0 :(得分:4)

  

在JDK 8中,编译器建议省略此

ArrayList<String> someList = new ArrayList<String>();
  

到此

ArrayList<String> someList = new ArrayList<>();

在Java 7中引入了菱形<>运算符,因为很容易推断出类型,并且无需重复该类型。

  

但是,即使像这样完全省略了菱形运算符,编译器也不会抱怨

ArrayList<String> someList = new ArrayList();

这里您使用的是Raw Types,不鼓励。

对于向后兼容性,在运行时,所有Collection都被视为包含Object。泛型用于在编译时建立一个的合同,其中说每次放入某个东西或从该集合中取出某些内容时必须属于xxx类型

所有泛型细节都不会在运行时保留(称为Type Erasure),因为泛型是Java的仅编译时间功能。

因此,此代码实际上是完全可以接受的(尽管不鼓励)。但是,如果你走得很远:

ArrayList someList = new ArrayList();

你将开始发现非常奇怪和意想不到的事情。

答案 1 :(得分:0)

这些只是编译器警告。

看起来警告建议丢弃使用钻石操作符的类型已打开。关于缺失类型/钻石操作符的警告未打开。

在任何情况下,编译的代码都是相同的。

基本上这些警告是为了帮助生产更安全的产品。代码,即更容易阅读。