Junior
Объектҳои тағйирнопазири (immutable) чистанд?
sobes.tech AI
Ҷавоб аз AI
Объектҳо, ҳолати онҳо пас аз эҷод кардан тағирнопазир аст. Ҳар даъвати тағир додан, ҳамеша объекти нав месозад.
Масаланҳои синфҳои тағирнопазир дар Java:
String- Қаппакҳои асосӣ (
Integer,Long,Booleanва ғайра) - Баъзе коллексияҳо (
Collections.unmodifiableList(),ImmutableListаз Guava)
Фоидаҳо:
- Бехатарии сими (назар ба ҳамзамон дастрасӣ, синхрон кардан лозим нест).
- Осонии истифода (ҳолати объект осон фаҳмидан аст).
- Мутобиқанд ҳамчун калидҳо дар HashMap ё унсурҳо дар Set (hashCode ва equals() тағир намеёбанд).
- Бо истифода аз кеш ва такрор истифода бурдан, суръатро беҳтар мекунанд.
Норасогӣ:
- Таҳия кардани объект нав дар ҳар тағирот метавонад самаранок набошад барои тағиротҳои зуд-зуд.
Таҳия кардани худ:
- Классро ҳамчун
finalэълон кунед. - Ҳама майдонҳоро хусусӣ ва
finalэълон кунед. - Методи сеттерро пешниҳод накунед.
- Дар геттерҳо барои майдонҳои мутабил, нусхаҳоро баргардонед, на истинодҳоро ба объектҳои аслӣ.
public final class ImmutablePerson {
private final String name;
private final int age;
private final List<String> hobbies;
public ImmutablePerson(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
// Нусха барои пешгирӣ аз тағиротҳои беруна
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Нусхаи номутобиқро баргардонед
return Collections.unmodifiableList(hobbies);
}
}