Какие проблемы могут возникнуть при передаче Lambda функции в Java-метод

«Какие проблемы могут возникнуть при передаче Lambda функции в Java-метод» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При передаче лямбда-функций в Java-методы могут возникнуть следующие проблемы:

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

  2. Сериализация - лямбды, реализующие Serializable, могут вести себя неожиданно.

  3. Контекст this - внутри лямбды this ссылается на внешний класс, а не на саму лямбду.

  4. Исключения - непроверяемые исключения в лямбде могут "просачиваться" наружу.