Я прочитал довольно много материала о лямбда. Но их тонкие сомнения:
Q1. Определение лямбда-выражений.
- Я не нашел четкого определения на странице Oracle.
- Эта ссылка говорит: "Лямбда-выражение Java, таким образом, является функцией, которую можно создать без принадлежности к какому-либо классу».
- Эта ссылка гласит: "Лямбда-выражение — это краткое представление анонимной функции, которая может передаваться».
- Эта ссылка говорит: "Лямбда-выражения в основном выражают экземпляры функциональных интерфейсов"
2-я и 3-я ссылка ничего не говорят о функциональных интерфейсах. Четвертая ссылка звучит неплохо, но в ней не упоминается «анонимный» аспект лямбда-выражений. Можем ли мы определить их более точно, как это:
Лямбда-выражения являются "синтаксически краткими выражениями для определения анонимных реализаций функциональных интерфейсов".
Я считаю, что указания слова «функциональный интерфейс» в определении должно быть достаточно, чтобы заявить, что мы реализуем его единственный метод, и он ведет себя как функция, а не класс, даже если это анонимные классы.
Вопрос 2. Есть ли различие между лямбда-выражениями и лямбда-выражениями?
Я чувствую, что есть разница, потому что лямбда-выражения могут использоваться для определения как лямбда-выражений, которые не имеют состояния, так и замыканий, которые имеют состояние (т.е. переменные доступа во внешней лексической области). Кажется, именно поэтому ссылка оракула не использует слово «лямбда» без «выражения». Однако это не относится к другим ссылкам.
Q3. Эта ссылка говорит, с лямбда-выражениями , «Нам не нужно писать много шаблонов, как мы делаем для анонимных классов». Теперь это звучит как «Лямбда-выражения похожи на анонимные классы, просто так», «нам не нужно писать много шаблонов, как мы делаем для анонимных классов». Я чувствую, что мы не можем напрямую сравнивать лямбда-выражения с анонимными классами, поскольку основное различие заключается в том, что концептуальный анонимный класс не имеет связи с функциональными интерфейсами, в то время как лямбда-выражения строго связаны с функциональными интерфейсами. Таким образом, анонимные классы могут иметь любое количество методов, но лямбда-выражения могут определять только один метод. Я прав с этим?