java - 使用 lambda 覆盖默认方法

标签 java lambda

给定一个带有默认方法的简单接口(interface):

private interface A {
    default void hello() {
        System.out.println("A");
    }
}

还有一个接受它实例的方法:

private static void print(A a) {
    a.hello();
}

我可以使用匿名类覆盖它:

print(new A() {
    @Override
        public void hello() {
        System.out.println("OverHello");
    }
});

但如果我尝试使用 lambda print(() -> System.out.println("OverHello2"));,我会遇到编译错误。

No target method found

有没有办法用 lambda 进行覆盖?

最佳答案

不,因为您的接口(interface)没有一个未实现的方法(lambda 可以为其提供实现)。

参见 @FunctionalInterface .

关于java - 使用 lambda 覆盖默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34904198/

相关文章:

haskell - lambda 内部的模式匹配

java - 如何判断 MediaPlayer 是否正在播放?

使用 maven eclipse AsciidoctorJ 时出现 java.lang.NoClassDefFoundError

java - 最终和有效最终之间的区别

android - 如何在 Kotlin 的 forEach 上引用外部 this

lambda - CloudWatch 日志延迟了 lambda 函数

java - Maven 版本范围拾取意外的依赖

windows - 有没有一种方法可以在不使用 Windows 命令行或 IDE 的情况下使用 JDK 工具?

java - Blackberry ListField 文本换行 - 仅两行

java - 在Java8中,如何确保不使用重复转换?