猿问

我们可以在接口内使用 lambda 表达式作为接口内的默认或静态实现吗?

我现在有一个奇怪的疑问,据我所知,为了使用 lambda 表达式,它应该是一个具有单一抽象方法的函数接口。现在的问题是我们可以在另一个接口中提供它的实现作为静态或默认实现吗?谢谢。



精慕HU
浏览 75回答 1
1回答

呼如林

您可以定义一个 lambda 表达式来表示一个A实例,无论您所处的上下文如何。它可以是静态接口方法,也可以是默认接口方法。@FunctionalInterfaceinterface A {    void printMessage();}interface B {    default void printMessage() {        A a = () -> System.out.println("A implementation (1)");        a.printMessage();    }}interface C {    static void printMessage() {        A a = () -> System.out.println("A implementation (2)");        a.printMessage();    }}正如您可能已经注意到的,它并不是特别有用,因为这两种方法都可以简单地重写为System.out.println("...");如果接口之间存在关系,则默认方法将为超级接口中定义的方法提供实现。静态方法会导致编译错误,因为它们无法覆盖实例方法。@FunctionalInterfaceinterface A {    void printMessage();}interface B extends A {    @Override    default void printMessage() {        A a = () -> System.out.println("A implementation (1)");        a.printMessage();    }}interface C extends A {    // compilation error    static void printMessage() {        A a = () -> System.out.println("A implementation (2)");        a.printMessage();    }} 
随时随地看视频慕课网APP

相关分类

Java
我要回答