Sobes.tech
Junior — Middle

Vai ir iespējams mainīt efektīvi final deklarētas mainīgās vērtību objekta iekšienē?

sobes.tech AI

Atbilde no AI

Java termins "effectively final" nozīmē, ka mainīgais pēc inicializācijas nav mainīts, lai gan tas nav tieši deklarēts ar atslēgvārdu final. Tas ir svarīgi, piemēram, izmantojot šādus mainīgos lambda izteiksmēs vai anonīmās klasēs.

Ja mainīgais ir deklarēts kā effectively final, tā vērtību nevar mainīt — mēģinājums piešķirt tai jaunu vērtību radīs kompilācijas kļūdu.

Tomēr, ja šis mainīgais norāda uz objektu, objekta stāvokli var mainīt, jo mainās ne referencē, bet objekta iekšējās lauki. Piemēram:

final List<String> list = new ArrayList<>();
list.add("jauns elements");  // Tas ir atļauts

// list = new ArrayList<>();  // Kļūda, nevar mainīt referenci

Tādējādi, mainīgā vērtība (referencē) nevar tikt mainīta, bet objekta saturs, uz kuru tas norāda, var tikt modificēts.