В лямбда-выражениях в Java можно обращаться к локальным переменным, объявленным во внешнем блоке. Однако такие переменные должны быть объявлены как final или effectively final. Это значит, что значение переменной не может быть изменено после присвоения.
Например, следующий код корректен, потому что переменная i объявлена как final:
final int i = 42;
Runnable r = () -> System.out.println("The answer is " + i);
А вот следующий код выдаст ошибку компиляции, потому что переменная i не объявлена как final:
int i = 42;
Runnable r = () -> System.out.println("The answer is " + i);
i = 43; // ошибка компиляции
Также в лямбда-выражении можно ссылаться на static переменные класса, как и на методы этого класса.
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov