匿名内部类改进

原文:https://www.studytonight.com/java-9/anonymous-inner-class-improvement

Java 9 在一个匿名类中添加了一个名为类型推断的新特性。它允许我们在创建匿名类时留下空的钻石运算符<>。

它看起来类似于集合框架中的类型推断。参见集合框架中改进的类型推断

让我们举一些例子来理解 Java 9 和早期版本中的这个特性。

示例:Java 8

在本例中,我们创建了一个匿名类,它实现了 add()方法来添加整型值。我们使用 Java 8 编译器执行了这个方法。因为这个特性被添加到了 Java 9 中。所以,Java 8 编译器抛出了一个错误。请看下面的例子。

interface Programable<T>{
    abstract T add(T t1, T t2);
}

public class Main { 
    public static void main(String[] args){
        Programable<Integer> p = new Programable<>() {
            public Integer add(Integer a, Integer b) {
                return a+b;
            }
        };
        Integer sum = p.add(10, 20);
        System.out.println(sum);
    }
}

Main.java:7:错误:无法推断可编程< T > 可编程<整数> p =新的可编程< > () { ^ 原因:无法将“< >”与匿名内部类 一起使用,其中 t 是类型变量: T 扩展在接口可编程 1 错误中声明的对象

示例:Java 9

如果我们使用 Java 9 执行这个例子,那么编译器会很好地执行它并产生期望的结果。

interface Programable<T>{
    abstract T add(T t1, T t2);
}

public class Main { 
    public static void main(String[] args){
        Programable<Integer> p = new Programable<>() {
            public Integer add(Integer a, Integer b) {
                return a+b;
            }
        };
        Integer sum = p.add(10, 20);
        System.out.println(sum);
    }
}

30

示例:抽象类

这个例子表明,如果我们有一个抽象类,那么我们可以从它创建一个匿名类,在这种情况下,类型推断也可以工作。

abstract class Programable<T>{
    abstract T add(T t1, T t2);
}

public class Main { 
    public static void main(String[] args){
        Programable<Integer> p = new Programable<>() {
            public Integer add(Integer a, Integer b) {
                return a+b;
            }
        };
        Integer sum = p.add(10, 20);
        System.out.println(sum);
    }
}

30