📜  Java带有示例的匿名内部类的Diamond运算符

📅  最后修改于: 2021-05-06 22:03:17             🧑  作者: Mango

先决条件:匿名内部类

Diamond运算符:Diamond运算符是Java 7中的一项新功能。Diamond运算符的主要目的是简化创建对象时泛型的使用。它避免了程序中未经检查的警告,并使程序更具可读性。 Diamond运算符不能与JDK 7中的匿名内部类一起使用。在JDK 9中,它也可以与匿名类一起使用,以简化代码并提高可读性。在JDK 7之前,我们必须在表达式的两侧创建一个具有通用类型的对象,例如:

// Here we mentioned the generic type
// on both side of expression while creating object
List geeks = new ArrayList();

在Java 7中引入Diamond运算符时,我们可以创建对象而无需在表达式的右侧提及泛型,例如:

List geeks = new ArrayList<>();

JDK 7中的Diamond运算符有问题吗?

借助Diamond运算符,我们可以创建一个对象,而无需在表达式的右侧提及泛型类型。但是问题在于它仅适用于普通类。假设您要对匿名内部类使用菱形运算符,则编译器将引发如下错误消息:

// Program to illustrate the problem
// while linking diamond operator
// with an anonymous inner class
  
abstract class Geeksforgeeks {
    abstract T add(T num1, T num2);
}
  
public class Geeks {
    public static void main(String[] args)
    {
        Geeksforgeeks obj = new Geeksforgeeks<>() {
            Integer add(Integer n1, Integer n2)
            {
                return (n1 + n2);
            }
        };
        Integer result = obj.add(10, 20);
        System.out.println("Addition of two numbers: " + result);
    }
}

输出:

prog.java:9: error: cannot infer type arguments for Geeksforgeeks
        Geeksforgeeks  obj = new Geeksforgeeks  () {
                                                        ^
  reason: cannot use '' with anonymous inner classes
  where T is a type-variable:
    T extends Object declared in class Geeksforgeeks
1 error

Java开发人员通过允许将Diamond运算符也与匿名内部类一起使用,扩展了JDK 9中diamond运算符的功能。如果我们使用JDK 9运行上述代码,则代码将正常运行,并且将生成以下输出。

输出:

Addition of two numbers: 30