Sobes.tech
Junior — Middle

Объекттин ичинде effectively final деп жарыяланган өзгөрмөнүн маанисин өзгөртүүгө болобу?

sobes.tech AI

AIден жооп

Javaда "effectively final" термині, өзгермелі бір өзгермелі мәні өзгермегенін білдіреді, дегенмен ол нақты final кілт сөзімен жарияланбаған. Бұл, мысалы, мұндай өзгермелі мәндерді лямбда өрнектерінде немесе анонимді сыныптарда қолдану үшін маңызды.

Егер өзгермелі мән effectively final ретінде жарияланса, оның мәнін өзгерту мүмкін емес — оған жаңа мән тағайындау компиляция қатесін тудырады.

Алайда, егер бұл өзгермелі мән объектке сілтеме жасаса, объектінің күйі өзгертілуі мүмкін, себебі өзгермелі мәннің сілтемесі емес, ішкі өрістері өзгертіледі. Мысалы:

final List<String> list = new ArrayList<>();
list.add("жаңа элемент");  // Бұл рұқсат етілген

// list = new ArrayList<>();  // Қате, сілтемені өзгертуге болмайды

Осылайша, өзгермелі мәннің (сілтеменің) мәнін өзгерту мүмкін емес, бірақ оған сілтеме жасайтын объектінің мазмұнын өзгертуге болады.