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

Can we use lambda expression inside an interface as a default or static implementation inside interfaces?

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

您可以定义代表 A 实例的 lambda 表达式,而不管您所处的上下文如何。它可以是静态接口方法,也可以是默认接口方法。

@FunctionalInterface
interface 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("...");

如果接口之间存在关系,则默认方法将为超接口中定义的方法提供实现。静态方法会导致编译错误,因为它们无法覆盖实例方法。

@FunctionalInterface
interface 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();
    }
}