Java'da immutability qanday ta'minlanadi?
sobes.tech AI
AIdan javob
Java'da o'zgarmaslik quyidagi usullar bilan ta'minlanadi:
-
Klassni
finalsifatida e'lon qilish: Klass meros olish mumkin emas, bu esa o'zgartiriladigan subclasslarning yaratilishini oldini oladi. -
Barcha maydonlarni
finalsifatida e'lon qilish: Maydonning qiymati faqat bir marta tayinlanishi mumkin (init qilishda yoki konstruktorda) va obyekt yaratilgandan so'ng o'zgartirilmaydi. -
Maydonlarning maxfiyligi: Maydonlar
privatebo'lishi kerak, shunda to'g'ridan-to'g'ri kirish va tashqaridan o'zgartirish oldini olinadi. -
Setterlar yoki obyekt holatini o'zgartiradigan metodlarning yo'qligi: Klass, obyekt yaratildgandan so'ng, maydonlarning qiymatini o'zgartiradigan jamoat metodlarini taqdim etmasligi kerak.
-
O'zgartiriladigan maydonlar bilan to'g'ri ishlash: Agar klass o'zgartiriladigan obyektlarga (masalan,
Listyoki o'zining o'zgartiriladigan klassi) havolalar saqlasa, quyidagilar qilish kerak:- Ularni initsializatsiya paytida nusxalarini yaratish (konstruktorda).
- Ularning nusxalarini getterlarda qaytarish, tashqaridan obyektning ichki holatini o'zgartirishni oldini olish uchun.
public final class ImmutableExample { // final klass
private final String name; // final va private maydon
private final List<String> items; // final va private maydon
public ImmutableExample(String name, List<String> items) {
this.name = name;
// O'zgartiriladigan ro'yxatning himoyalangan nusxasini yaratish
this.items = new ArrayList<>(items);
}
public String getName() {
return name;
}
public List<String> getItems() {
// O'zgartiriladigan ro'yxatning himoyalangan nusxasini qaytarish
return Collections.unmodifiableList(new ArrayList<>(items));
}
// O'zgartirish holatini o'zgartiradigan setterlar yoki metodlar yo'q
}
Java'da ichki o'zgarmas klasslar misollari: String, primitiv turlarining qoplamalari (Integer, Long va boshqalar), BigInteger, BigDecimal.