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