Sobes.tech
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);
    }
}