Java 9新特性 - (2)匿名内部类与菱形运算符

Java 9新特性 - (2)匿名内部类与菱形运算符

June 21, 2021

什么是菱形运算符

菱形操作符是作为 java SE 7 中的新功能引入的。菱形操作符的目的是通过将泛型类型保留在表达式的右侧来避免冗余代码。

// Java 7之前的写法
List<string> myList = new ArrayList<string>();

// Java 7及之后的写法
List<string> myList = new ArrayList<>();

Java 7 允许我们在普通类中使用菱形运算符,但它不允许我们在匿名内部类中使用它们。

abstract class MyClass<T>{  
    abstract T add(T num, T num2);  
}  
public class JavaExample {  
    public static void main(String[] args) {  
        MyClass<Integer> obj = new MyClass<>() {  
            Integer add(Integer x, Integer y) {  
                return x+y;   
            }  
        };    
        Integer sum = obj.add(100,101);  
        System.out.println(sum);  
    }  
}

上面的例子用Java 8编译会报错

$javac JavaExample.java
JavaExample.java:7: error: cannot infer type arguments for MyClass
        MyClass obj = new MyClass<>() {  
                                        ^
  reason: cannot use '<>' with anonymous inner classes
  where T is a type-variable:
    T extends Object declared in class MyClass
1 error

Java 9对菱形运算符的改进

Java 9 改进了菱形运算符的使用,并允许我们将菱形运算符与匿名内部类一起使用。用上面的例子,在 Java 9 中运行此代码,输出:

201

参考:

最后更新于