Я практикую лямбда-функции, я знаю, что для работы с ними нам нужно создать функциональный интерфейс, содержащий только один нереализованный абстрактный метод.
Итак, мне было интересно, почему java не t позволяют использовать более одного абстрактного метода, даже если они имеют разные подписи. Итак, я прочитал связанные вопросы о переполнении стека. И вот что у меня получилось. аналогичный вопрос
Ответ будет заключаться в том, что для создания действительной реализации вам потребуется иметь возможность передавать N лямбд за один раз, что внесет много двусмысленности. и огромное снижение читабельности.
Теперь я провел небольшой эксперимент, я создал интерфейс с двумя реализованными абстрактными методами с разными сигнатурами.
Это myInterface
интерфейс
interface MyInterface {
abstract void func();
abstract void func(int i);
}
И реализовал одну функцию, как обычно, а другую как лямбда-выражение
Это Lambda
класс
class Lambda implements MyInterface{
public void doWork(MyInterface myInterface) {
myInterface.func();
}
public static void main(String[] args) {
Lambda lambda = new Lambda();
lambda.doWork( e -> System.out.println("func:" + e ));
}
@Override
public void func() {
System.out.println("func");
}
}
Очевидно, этот код не работает . Я просто не могу понять, хотя у меня две разные сигнатуры, и даже если одна из них реализована нормально, почему мы не можем реализовать другой оставшийся метод с лямбда. Это как-то связано с качеством кода и удобством обслуживания? Может ли кто-нибудь объяснить, что я не могу понять это? Пожалуйста, дайте пример, если возможно.