钻石
Version >= Java SE 7
Java 7 引入了 Diamond 1 来删除围绕泛型类实例化的一些样板。使用 Java 7+,你可以编写:
List<String> list = new LinkedList<>();
你必须在以前的版本中写的地方,这个:
List<String> list = new LinkedList<String>();
一个限制是匿名类 ,你仍然必须在实例化中提供类型参数:
// This will compile:
Comparator<String> caseInsensitiveComparator = new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
};
// But this will not:
Comparator<String> caseInsensitiveComparator = new Comparator<>() {
@Override
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
};
Version > Java SE 8
尽管在 Java 7 和 8 中不支持使用带有匿名内部类的菱形, 但它将作为 Java 9 中的新功能包含在内 。
脚注:
1 - 有些人将 <>
用作“钻石运算符 ”。这是不正确的。钻石不像运算符那样,并且不作为运算符在 JLS 或(官方)Java 教程中的任何地方描述或列出。实际上,<>
甚至不是一个独特的 Java 令牌。相反,它是一个 <
令牌,后跟一个 >
令牌,并且在两者之间有空格或评论是合法的(虽然样式不好)。 JLS 和 Tutorials 始终将 <>
称为钻石,因此它是正确的术语。