如何使用Lambda表达式覆盖两个或更多个接口方法?

时间:2019-02-08 11:56:19

标签: java lambda

1.InterfaceOne是一个具有两种方法的接口,我的问题是如何使用Lambda表达式覆盖这2种方法?

interface InOne{

    void m1();
    void m2();
}
public class LambdaExpForTwomethodsInInterface {

    public static void main(String[] args) {

        //For One method overriding
        InOne one=()->{
            System.out.println("InOne m1");
        };
        one.m1();
    }
}

2。如果接口中有5种方法,但是我只想覆盖一种方法,那么使用Lambda exp有什么办法吗?

2 个答案:

答案 0 :(得分:4)

  

使用Lambda exp有什么办法吗?

不,它们只能引用FunctionalInterface

  

如何使用Lambda表达式覆盖这两种方法?

尽管不能使用lambda表达式,但是您仍然可以使用匿名类实例化它们:

InOne one = new InOne() {
    @Override
    public void m1() {

    }

    @Override
    public void m2() {

    }
};

答案 1 :(得分:0)

interface InOne {
    default void m1() {}
    default void m2() {}
}

实施

InOne one = new InOne() {
    @Override
    public void m1() {
        System.out.println("InOne m1");
    }
};

one.m1();  // InOue m1
one.m2();  // <nothing>

使用Lambda实现

@FunctionalInterface
interface InOneM1 {
    void m1();
}

@FunctionalInterface
interface InOneM2 {
    void m2();
}

InOneM1 oneM1 = () -> System.out.println("InOne m1");
InOneM2 oneM2 = () -> System.out.println("InOne m2");

oneM1.m1();
oneM2.m2();