为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

精慕HU 2023-07-19 16:03:39
我现在有一个奇怪的疑问,据我所知,为了使用 lambda 表达式,它应该是一个具有单一抽象方法的函数接口。现在的问题是我们可以在另一个接口中提供它的实现作为静态或默认实现吗?谢谢。
查看完整描述

1 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

您可以定义一个 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();

    }


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信