Lambda不会从单独的文件覆盖接口方法

时间:2019-06-24 18:44:14

标签: java lambda interface

  1. 当功能接口位于lambda覆盖该文件的同一文件中时,它可以正常编译。
package test.test;
public class Base {
    public static void main(String[] args) {
        Interface1 a = n -> System.out.println(2*n);
    }
}
interface Interface1 { 
    void multiplyByTwo(int x); 
}
  1. 当功能接口位于单独的文件中并且Base类实现它时,它无法编译并出现Base is not abstract and does not override abstract method multiplyByFour(int) in Interface3错误。
package test.test;
public class Base implements Interface3 {
    public static void main(String[] args) {
        Interface3 b = n -> System.out.println(4*n);
    }
}
package test.test;
public interface Interface3 { 
    void multiplyByFour(int x); 
}
  1. 这里有问题吗?为什么lambda在第二种情况下不覆盖该方法?

1 个答案:

答案 0 :(得分:2)

您的第一个示例具有:

Interface1

未实现public class Base implements Interface3 {

但是,您的第二个示例具有:

Interface3

哪个实现了interface

不确定您要在这里做什么,但这是预期的行为:

接口

当类实现public interface IFoo { void bar(); } 时,必须将所有方法都实现到该类中

例如:

public class FooImpl implements IFoo {
    // must implement bar method in IFoo
    public void bar() {
        System.out.println("I did something");
    }

}

和班级:

implements Interface3

在main方法中具有lambda并不构成实现接口方法。

修正?

只需删除Invoke-Command,就不需要在类中实现该接口即可使用它。