Sobes.tech
Junior

როგორ უზრუნველყოფილია Java-ში შეუცვლელობა?

sobes.tech AI

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

Java- ში მუტაბელურობის უზრუნველყოფა შემდეგი გზებით ხდება:

  1. კლასის გამოცხადება final-ად: კლასი არ შეიძლება მემკვიდრეობით იყოს, რაც აცილებს მუტაბელურ ქვკლასების შექმნას.

  2. ყველა ველის გამოცხადება final-ად: ველის მნიშვნელობა შეიძლება მიენიჭოს მხოლოდ ერთხელ (ინიციალიზაციის ან კონსტრუქტორში) და მას შემდეგ ვერ შეიცვლება ობიექტის შექმნის შემდეგ.

  3. ველის კონფიდენციალურობა: ველები უნდა იყოს პრივატული (private), რათა თავიდან აიცილოს პირდაპირი წვდომა და მნიშვნელობების შეცვლა გარედან.

  4. სეტტერების ან ობიექტის მდგომარეობის შეცვლის მეთოდების არარსებობა: კლასი არ უნდა უზრუნველყოფდეს საჯარო მეთოდებს, რომლებიც შეიძლება შეცვალოს ობიექტის ველების მნიშვნელობები მისი შექმნის შემდეგ.

  5. მუტაბელური ველების სწორად მართვა: თუ კლასი შეიცავს მუტაბელურ ობიექტებზე მიმთითვლებს (მაგალითად, 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.