📅  最后修改于: 2023-12-03 15:15:55.075000             🧑  作者: Mango
匿名内部类是一种在Java编程中经常使用的技巧。它可以让程序员在代码中定义并使用一个接口或者抽象类的实例,而无需显式地声明一个类来实现该接口或抽象类。
Java 9对匿名内部类进行了改进,使它们更加灵活和易于使用。在本文中,我们将介绍Java 9匿名内部类的新特性和用法。
Java 9匿名内部类的基本语法与Java 8相同。其基本语法如下:
new InterfaceName() {
// implementation code for the interface methods goes here
};
例如,假设我们有一个接口MyInterface
:
interface MyInterface {
void foo();
}
现在,我们可以使用匿名内部类来实现该接口:
MyInterface myObj = new MyInterface() {
public void foo() {
// implementation code for the foo method goes here
}
};
在上面的例子中,我们创建了一个实现MyInterface
接口的匿名内部类,并将其赋值给变量myObj
。该匿名内部类实现了foo
方法的代码。
Java 9允许在接口中定义私有方法。私有方法只能在接口内部使用,不能从接口的实现类中访问。使用私有方法可以将一些重复的代码封装在接口内,使代码更易于维护和修改。
对于使用匿名内部类实现接口的开发人员,这意味着我们现在可以在匿名内部类中使用接口中定义的私有方法。例如,考虑以下修改后的MyInterface
接口:
interface MyInterface {
default void bar() {
// implementation code for the bar method goes here
baz();
}
private void baz() {
// implementation code for the baz method goes here
}
}
注意到我们添加了一个名为baz
的私有方法。现在,如果我们使用匿名内部类实现MyInterface
,我们可以像下面这样使用baz
方法:
MyInterface myObj = new MyInterface() {
public void foo() {
// implementation code for the foo method goes here
}
public void bar() {
// implementation code for the bar method goes here
// we can also use the private baz method here
baz();
}
};
在上面的例子中,我们使用baz
方法来实现bar
方法。因为baz
是接口中的私有方法,所以我们不能从匿名内部类的外部访问它。
匿名内部类可以使用Java的Diamond操作符来创建泛型类型的实例。Diamond操作符可以省略泛型类型的实例化语句中的类型参数,通过编译器来推断类型参数。
在Java 8中,这只适用于普通的类。但是在Java 9中,它也适用于匿名内部类。
例如,我们可以使用以下方式创建一个匿名内部类实例:
List<String> myList = new ArrayList<>() {
{
add("foo");
add("bar");
}
};
在上面的例子中,我们使用Diamond操作符创建了一个实现List<String>
接口的匿名内部类,并初始化了它的值。
Java 9对匿名内部类进行了改进,增加了对接口私有方法和Diamond操作符的支持。这些新特性使得匿名内部类更加灵活和易于使用,使得我们编写更加清晰和易于维护的代码。