Sobes.tech
Junior

რა არის უცვლელი ობიექტები (immutable)?

sobes.tech AI

პასუხი AI-სგან

არამოყვანილი ობიექტები, რომელთა მდგომარეობა ვერ იცვლება შექმნის შემდეგ. მცდელობისას ყოველთვის ახალი ობიექტი იქმნება.

Java-ში არამოყვანილი კლასების მაგალითები:

  • String
  • პრიმიტიული ორბოლების (Integer, Long, Boolean და სხვა)
  • ზოგი კოლექცია (Collections.unmodifiableList(), Guava-ის ImmutableList)

უპირატესობები:

  • თრედ-უსაფრთხოება (არ საჭიროებს სინქრონიზაციას ერთდროულ წვდომაზე).
  • გამოყენების სიმარტივე (ობიექტის მდგომარეობა ადვილად გასაგებია).
  • შეიძლება გამოყენებულ იქნას როგორც გასაღებები 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);
    }
}