Java钻石

示例

Java SE 7

Java 7引入了Diamond 1,以删除通用类实例化周围的一些样板。使用Java 7+,您可以编写:

List<String> list = new LinkedList<>();

在以前的版本中必须写的地方:

List<String> list = new LinkedList<String>();

匿名类的一个限制是,您仍然必须在实例化中提供type参数:

// 这将编译:

Comparator<String> caseInsensitiveComparator = new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareToIgnoreCase(s2);
    }
};

// 但这不会:

Comparator<String> caseInsensitiveComparator = new Comparator<>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.compareToIgnoreCase(s2);
    }
};

Java SE 8

尽管Java 7和8不支持将钻石与匿名内部类一起使用,但它将作为Java 9的新功能包括在内


脚注:

1-有人称这种<>用法为“钻石算子”。这是不正确的。菱形没有充当运算符,并且在JLS或(官方)Java教程的任何地方都没有将菱形描述为运算符。确实,<>它甚至不是一个独特的Java令牌。相反,它是一个<标记,后跟一个>标记,并且在两者之间具有空格或注释是合法的(尽管风格很差)。JLS和教程始终将其<>称为“钻石”,因此这是正确的术语。