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

时间:2019-09-08 09:50:52

标签: java interface functional-programming abstract functional-interface

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

1 个答案:

答案 0 :(得分:0)

您可以定义一个lambda表达式来表示A实例,无论您处于何种上下文中。它可以是静态接口方法,也可以是默认接口方法。

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