Sobes.tech
Junior — Middle

Môže lambda výraz získať prístup k premennej deklarovanej v rámci metódy, v ktorej je definovaná?

sobes.tech AI

Odpoveď od AI

Výraz lambda v Jave môže získať prístup k lokálnej premennej deklarovanej v metóde iba v prípade, že je táto premená efektívne finalná. To znamená, že po inicializácii sa jej hodnota nemení.

Príklad:

public void priklad() {
    int cislo = 10; // efektívne finalná premená
    Runnable r = () -> System.out.println(cislo);
    r.run();
}

Ak sa pokúsite zmeniť cislo po definovaní lambda, kompilátor vypíše chybu.

Toto obmedzenie súvisí s tým, že lambda môže byť spustená neskôr, a aby sa predišlo problémom s meniteľným stavom, Java vyžaduje, aby tieto premenne boli nemenné.