Как переопределить два и более методов интерфейса, используя лямбда-выражения? - PullRequest
0 голосов
/ 08 февраля 2019

1.InterfaceOne - это один интерфейс, имеющий два метода, мой вопрос: как переопределить эти 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 голосов
/ 08 февраля 2019
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>

Реализация с использованием лямбды

@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();
0 голосов
/ 08 февраля 2019

есть ли способ использовать Lambda exp?

Нет, они предназначены только для ссылок FunctionalInterface с.

какпереопределить эти 2 метода, используя лямбда-выражение?

Хотя невозможно использовать лямбда-выражение, вы все равно можете использовать анонимный класс для их создания:

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

    }

    @Override
    public void m2() {

    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...