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<>();  // Хатогӣ, ишора кардан мумкин нест

Аз ин рӯ, арзиши тағирёбанда (ишора) тағир додан мумкин нест, аммо мазмуни объекти, ки ба он ишора мекунад, метавонад тағир дода шавад.