先决条件:匿名内部类
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