Sobes.tech
Junior — Middle

Може ли лямбда изразът да получи достъп до променлива, обявена вътре в метода, в който е дефиниран?

sobes.tech AI

Отговор от AI

Изразът lambda в Java може да получи достъп до локална променлива, обявена в метода, само ако тази променлива е ефективно финална. Това означава, че след инициализацията стойността на променливата не се променя.

Пример:

public void primer() {
    int chislo = 10; // ефективно финална променлива
    Runnable r = () -> System.out.println(chislo);
    r.run();
}

Ако се опитате да промените chislo след дефинирането на лямбдата, компилаторът ще даде грешка.

Това ограничение е свързано с факта, че лямбдата може да се изпълни по-късно, и за да се избегнат проблеми с променливото състояние, Java изисква тези променливи да са неизменяеми.