Sobes.tech
Junior — Middle

Ar galima keisti objekto viduje efektyviai paskelbtos kintamosios reikšmę?

sobes.tech AI

Atsakymas iš AI

Java terminas "effectively final" reiškia, kad kintamasis po inicializacijos nebuvo pakeistas, nors jis nėra aiškiai deklaruotas su raktiniu žodžiu final. Tai svarbu, pavyzdžiui, naudojant tokius kintamuosius lambda išraiškose ar anoniminėse klasėse.

Jei kintamasis deklaruotas kaip effectively final, jo reikšmės keisti negalima — bandymas priskirti naują reikšmę sukels kompiliatoriaus klaidą.

Tačiau, jei šis kintamasis nurodo į objektą, objekto būklė gali būti keičiama, nes keičiasi ne nuoroda, o objekto vidiniai laukai. Pavyzdžiui:

final List<String> list = new ArrayList<>();
list.add("naujas elementas");  // Tai leidžiama

// list = new ArrayList<>();  // Klaida, negalima keisti nuorodos

Taigi, kintamojo reikšmė (nuoroda) negali būti keičiama, tačiau objekto turinys, į kurį jis nurodo, gali būti keičiamas.