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,Booleanva boshqalar) - Ba'zi kolleksiyalar (
Collections.unmodifiableList(), Guava'danImmutableList)
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
finaldeb e'lon qilish. - Barcha maydonlarni maxfiy va
finalqilish. - 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);
}
}