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

分享到:

文章目录

什么是菱形运算符

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

1// Java 7之前的写法
2List<string> myList = new ArrayList<string>();
3
4// Java 7及之后的写法
5List<string> myList = new ArrayList<>();

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

 1abstract class MyClass<T>{  
 2    abstract T add(T num, T num2);  
 3}  
 4public class JavaExample {  
 5    public static void main(String[] args) {  
 6        MyClass<Integer> obj = new MyClass<>() {  
 7            Integer add(Integer x, Integer y) {  
 8                return x+y;   
 9            }  
10        };    
11        Integer sum = obj.add(100,101);  
12        System.out.println(sum);  
13    }  
14}

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

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

Java 9对菱形运算符的改进

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

1201

参考: