匿名内部类改进
原文: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