Ответ
При передаче лямбда-функций в Java-методы могут возникнуть следующие проблемы:
- Захват переменных - лямбда может захватывать только effectively final переменные. Попытка изменить захваченную переменную приведёт к ошибке:
int counter = 0;
Runnable r = () -> counter++; // Ошибка компиляции
- Null-ссылки - если лямбда передаётся как null, вы получите NPE:
executeAction(null); // NullPointerException
-
Производительность - частые вызовы лямбд создают дополнительные объекты, что может влиять на GC.
-
Сериализация - лямбды, реализующие Serializable, могут вести себя неожиданно.
-
Контекст this - внутри лямбды this ссылается на внешний класс, а не на саму лямбду.
-
Исключения - непроверяемые исключения в лямбде могут "просачиваться" наружу.