使用lambdas覆盖默认方法

T4l*_*l0n 6 java lambda

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

private interface A {
    default void hello() {
        System.out.println("A");
    }
}
Run Code Online (Sandbox Code Playgroud)

并且接受它的实例的方法:

private static void print(A a) {
    a.hello();
}
Run Code Online (Sandbox Code Playgroud)

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

print(new A() {
    @Override
        public void hello() {
        System.out.println("OverHello");
    }
});
Run Code Online (Sandbox Code Playgroud)

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

找不到目标方法

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

Boh*_*ian 9

不,因为你的界面没有一个未实现的方法(lambda可以提供实现).

@FunctionalInterface.