Junior
Ի՞նչ են անփոփոխ օբյեկտները (immutable):
sobes.tech AI
Պատասխան AI-ից
Անփոփոխ օբյեկտները, որոնց վիճակը չի կարող փոխվել ստեղծելուց հետո: Փորձել փոփոխելիս միշտ ստեղծվում է նոր օբյեկտ:
Java-ում անփոփոխ դասերի օրինակներ՝
String- հիմնական օղակներ (
Integer,Long,Booleanև այլն) - որոշ հավաքածուներ (
Collections.unmodifiableList(), Guava-իImmutableList)
Առավելություններ՝
- Թելային անվտանգություն (չի պահանջում սինխրոնիզացիա համատեղ մուտքի ժամանակ)
- Օգտագործման պարզություն (օբյեկտի վիճակը հեշտ է հասկանալ)
- Կարող են օգտագործվել որպես բանալի HashMap-ում կամ տարրեր Set-ում (նրանց hashCode և equals() չեն փոխվում)
- Կայունացնում են կատարողականությունը՝ օգտագործելով կեշավորում և վերաօգտագործում
Անբարենպաստություններ՝
- Նոր օբյեկտ ստեղծելը յուրաքանչյուր փոփոխության դեպքում կարող է լինել անարդյունավետ հաճախակի փոփոխությունների դեպքում
Իմ սեփական ստեղծումը՝
- Դեկլարել դասը որպես
final - Բոլոր դաշտերը դարձնել մասնավոր և
final - Չտալ setter մեթոդներ
- Մուտաբել դաշտերի getter-ներում վերադարձնել պատճեններ, ոչ թե հղումներ սկզբնական օբյեկտներին
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);
}
}