Sobes.tech
Junior — Middle

O'zgarmas sinfning obyekti nusxasini yaratishda qaysi jihatlar hisobga olinishi kerak?

sobes.tech AI

AIdan javob

Nimzayil (immutable) sinf uchun obyekt nusxasini yaratish odatda chuqur klonlashni talab qilmaydi, chunki obyekt holati yaratildikten so'ng o'zgarmaydi.

Asosiy jihatlar:

  • Agar sinf haqiqatan ham nimzayil bo'lsa, shunchaki shu obyektga havolani qaytarish mumkin, chunki u o'zgarmaydi.
  • Agar o'zgartirilgan holat bilan yangi obyekt yaratish kerak bo'lsa, odatda kerakli parametrlar bilan yangi nusxa yaratiladi.
  • Barcha maydonlar final bo'lishi va o'zlari ham nimzayil bo'lishi muhim (masalan, String, primitivi turlar yoki nimzayil kolleksiyalar).

Misol:

public final class ImmutablePoint {
    private final int x;
    private final int y;

    public ImmutablePoint(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public ImmutablePoint copy() {
        // Bu obyekt nimzayil bo'lgani uchun, shunchaki this ni qaytarish mumkin
        return this;
    }

    public ImmutablePoint withX(int newX) {
        return new ImmutablePoint(newX, this.y);
    }
}

Shunday qilib, nimzayil obyektning nusxasi odatda kerak emas yoki yangi holat bilan yangi obyekt sifatida yaratiladi.