Sobes.tech
Junior — Middle

Czy wyrażenie lambda może uzyskać dostęp do zmiennej zadeklarowanej wewnątrz metody, w której jest zdefiniowane?

sobes.tech AI

Odpowiedź od AI

Wyrażenie lambda w Java może uzyskać dostęp do zmiennej lokalnej zadeklarowanej w metodzie tylko wtedy, gdy ta zmienna jest efektywnie finalna. Oznacza to, że po inicjalizacji wartość zmiennej nie ulega zmianie.

Przykład:

public void przyklad() {
    int liczba = 10; // efektywnie finalna zmienna
    Runnable r = () -> System.out.println(liczba);
    r.run();
}

Jeśli spróbujesz zmienić liczba po zdefiniowaniu lambda, kompilator zgłosi błąd.

To ograniczenie jest związane z tym, że lambda może być wykonywana później, a aby uniknąć problemów z modyfikowalnym stanem, Java wymaga, aby takie zmienne były niezmiennicze.