Лямбда-выражение JAVA-8 - PullRequest
0 голосов
/ 15 ноября 2018

Я только что начал с версии JAVA 1.8, и у меня возник вопрос при просмотре руководств по лямбда-выражению.

Можем ли мы иметь более 1 реализации (лямбда-выражения) для абстрактного метода, создав несколько экземпляровИнтерфейс В ТОМ ЖЕ КЛАССЕ ??? Я попробовал код, и он работал отлично ....

Теперь мой вопрос заключается в том, что сама концепция интерфейса заключается в том, что каждый РЕАЛИЗУЮЩИЙСЯ КЛАСС БУДЕТ ОПРЕДЕЛЕН ДЛЯ РЕЗЮМЕМЕТОД.ПОТОМ КАК МЫ МОЖЕМ ИМЕЕТ ДВУХ МЕТОДНЫХ ОРГАНОВ (лямбда-выражений) в ЖЕ КЛАССЕ ???

Рассмотрим следующий код:

public static void main(String[] args) {

    Interf i = (a, b) -> a + b;
    System.out.println("The result is >> " + i.result(10, 20));

    Interf i1 = (a, b) -> a - b;
    System.out.println("The result is >> " + i1.result(10, 20));


}

Вывод:

Результат>> 30

Результат >> -10

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

На самом деле это две разные реализации одного и того же интерфейса.На самом деле, вы можете использовать существующий BinaryOperator, чтобы сделать то же самое, а не изобретать велосипед, как это.

BinaryOperator<Integer> sum = (n1, n2) -> n1 + n2;
BinaryOperator<Integer> substract = (n1, n2) -> n1 - n2;

System.out.println(sum.apply(10, 20));
System.out.println(substract.apply(10, 20)); 
0 голосов
/ 15 ноября 2018

Каждое из ваших двух лямбда-выражений реализует ваш Interf функциональный интерфейс отдельно.Поэтому каждая реализация этого интерфейса имеет единственную реализацию единственного абстрактного метода этого интерфейса.

Даже до Java 8 и лямбда-выражений вы могли создать два экземпляра анонимного класса, которые реализуют ваш интерфейс Interf.У каждого из них будет одна реализация Interf.

Тот факт, что два лямбда-выражения определены в одном классе, не означает, что две реализации абстрактного функционального интерфейсаМетод принадлежит к тому же классу.

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