为什么当我在main方法中实现lambda表达式时,编译器没有说接口已实现?

时间:2019-09-25 03:13:19

标签: java lambda interface interface-implementation

当我在main方法中将接口实现为Lambda表达式时,它并不算是已实现。

我知道我可以在main方法之外实现它,但是我不明白为什么无论如何我必须在Lambda表达式之外实现它。

public class Driver implements Interface1, Interface2, Interface3 {

    public static void main(String[] args) {

        //Implementing Interface1
        double x;
        Interface1 obj = () -> 5.5;
        x = obj.foo();
        System.out.println(x);

        //Implementing Interface2
        String str;
        Interface2 obj2 = (a) -> String.format("The number is %d", a);
        str = obj2.foo(356);
        System.out.println(str);

        //Implementing Interface3

        boolean tF;
        Interface3 obj3 = (i, s) -> i == Integer.parseInt(s);


        tF = obj3.foo(30, "30");
        System.out.print(tF);

    }

在这里,我在第1行收到一条错误消息,告诉我未实现接口。它仍然可以编译和运行,我只是不明白为什么收到此消息。 当前输出为:

5.5
The number is 356
true

1 个答案:

答案 0 :(得分:1)

您要做的就是在main方法中定义局部变量,其类型恰好与 class 必须实现的接口相符。

您必须在类中定义方法,该方法为该类的所有接口提供实现。例如:

public class Driver implements Interface1, Interface2, Interface3 {
    public static void main(String[] args) {
        // all code in here is irrelevant to the class implementing Interface1, Interface2, Interface3
    }

    public void interface1Method() {
        // whatever
    }

    public void interface2Method() {
        // whatever
    }

    public void interface3Method() {
        // whatever
    }
}

请注意,您不能为此使用lambda; Driver实际上必须从其声明正在实现的所有接口中声明缺少的方法的实现。