როგორ უზრუნველყოფილია Java-ში შეუცვლელობა?
sobes.tech AI
პასუხი AI-სგან
Java- ში მუტაბელურობის უზრუნველყოფა შემდეგი გზებით ხდება:
-
კლასის გამოცხადება
final-ად: კლასი არ შეიძლება მემკვიდრეობით იყოს, რაც აცილებს მუტაბელურ ქვკლასების შექმნას. -
ყველა ველის გამოცხადება
final-ად: ველის მნიშვნელობა შეიძლება მიენიჭოს მხოლოდ ერთხელ (ინიციალიზაციის ან კონსტრუქტორში) და მას შემდეგ ვერ შეიცვლება ობიექტის შექმნის შემდეგ. -
ველის კონფიდენციალურობა: ველები უნდა იყოს პრივატული (
private), რათა თავიდან აიცილოს პირდაპირი წვდომა და მნიშვნელობების შეცვლა გარედან. -
სეტტერების ან ობიექტის მდგომარეობის შეცვლის მეთოდების არარსებობა: კლასი არ უნდა უზრუნველყოფდეს საჯარო მეთოდებს, რომლებიც შეიძლება შეცვალოს ობიექტის ველების მნიშვნელობები მისი შექმნის შემდეგ.
-
მუტაბელური ველების სწორად მართვა: თუ კლასი შეიცავს მუტაბელურ ობიექტებზე მიმთითვლებს (მაგალითად,
Listან საკუთარი მუტაბელური კლასი), საჭიროა:- შექმნათ მათი ასლები ინიციალიზაციისას (კონსტრუქტორში).
- დააბრუნოთ მათი ასლები გეტტერებში, რათა თავიდან აიცილოს ობიექტის შიდა მდგომარეობის შეცვლა გარედან.
public final class ImmutableExample { // final კლასი
private final String name; // final და პრივატული ველი
private final List<String> items; // final და პრივატული ველი
public ImmutableExample(String name, List<String> items) {
this.name = name;
// მუტაბელური სიელის დაცული ასლის შექმნა
this.items = new ArrayList<>(items);
}
public String getName() {
return name;
}
public List<String> getItems() {
// დაცული ასლის დაბრუნება
return Collections.unmodifiableList(new ArrayList<>(items));
}
// სეტტერების ან მდგომარეობის შეცვლის მეთოდების არარსებობა
}
Java-ს შიგნით არსებული მუტაბელური კლასების მაგალითებია: String, პრიმიტივების ობერტაიპების კლასები (Integer, Long და სხვა), BigInteger, BigDecimal.