钻石

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 始终将 <> 称为钻石,因此它是正确的术语。