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.