Sobes.tech
Junior

Nima immutable (o'zgarmas) ob'ektlar?

sobes.tech AI

AIdan javob

Ob'ektlar, holatlari yaratildikdan keyin o'zgartirilmaydigan. O'zgartirishga urinishda har doim yangi ob'ekt yaratiladi.

Java'da o'zgartirilmaydigan sinflarga misollar:

  • String
  • Primitiv qoplamalar (Integer, Long, Boolean va boshqalar)
  • Ba'zi kolleksiyalar (Collections.unmodifiableList(), Guava'dan ImmutableList)

Afzalliklar:

  • Ipni xavfsizligi (birgalikda kirishda sinxronizatsiya talab qilmaydi).
  • Foydalanish osonligi (ob'ekt holati oson tushunarli).
  • HashMap kalitlari yoki Set elementlari sifatida ishlatilishi mumkin (ularning hashCode va equals() o'zgarmaydi).
  • Kesh va takror foydalanish imkoniyati bilan ishlashni yaxshilaydi.

Kamchiliklar:

  • Har bir o'zgartirishda yangi ob'ekt yaratish samarali bo'lmasligi mumkin.

O'zini yaratish:

  • Sinfni final deb e'lon qilish.
  • Barcha maydonlarni maxfiy va final qilish.
  • Setteri metodlarni taqdim etmaslik.
  • O'zgaruvchan maydonlar uchun getterlarda, original ob'ektlarga havolalar o'rniga nusxalarini qaytarish.
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;
        // O'zgartirishdan saqlanish uchun nusxa olish
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // O'zgarmas ro'yxatni qaytarish
        return Collections.unmodifiableList(hobbies);
    }
}