📜  Java 9匿名内部类(1)

📅  最后修改于: 2023-12-03 15:15:55.075000             🧑  作者: Mango

Java 9匿名内部类

匿名内部类是一种在Java编程中经常使用的技巧。它可以让程序员在代码中定义并使用一个接口或者抽象类的实例,而无需显式地声明一个类来实现该接口或抽象类。

Java 9对匿名内部类进行了改进,使它们更加灵活和易于使用。在本文中,我们将介绍Java 9匿名内部类的新特性和用法。

1. 基本语法

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方法的代码。

2. 接口私有方法

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是接口中的私有方法,所以我们不能从匿名内部类的外部访问它。

3. Diamond操作符

匿名内部类可以使用Java的Diamond操作符来创建泛型类型的实例。Diamond操作符可以省略泛型类型的实例化语句中的类型参数,通过编译器来推断类型参数。

在Java 8中,这只适用于普通的类。但是在Java 9中,它也适用于匿名内部类。

例如,我们可以使用以下方式创建一个匿名内部类实例:

List<String> myList = new ArrayList<>() {
    {
        add("foo");
        add("bar");
    }
};

在上面的例子中,我们使用Diamond操作符创建了一个实现List<String>接口的匿名内部类,并初始化了它的值。

总结

Java 9对匿名内部类进行了改进,增加了对接口私有方法和Diamond操作符的支持。这些新特性使得匿名内部类更加灵活和易于使用,使得我们编写更加清晰和易于维护的代码。