在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<>();
这似乎在运行时没有任何问题。钻石操作员与没有钻石操作员之间是否有任何具体差异?如果有人可以详细说明,我真的很感激。
答案 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)
这些只是编译器警告。
看起来警告建议丢弃使用钻石操作符的类型已打开。关于缺失类型/钻石操作符的警告未打开。
在任何情况下,编译的代码都是相同的。
基本上这些警告是为了帮助生产更安全的产品。代码,即更容易阅读。