Sobes.tech
Junior — Middle

Kokius aspektus reikėtų apsvarstyti kuriant nekeičiamos klasės objekto kopiją?

sobes.tech AI

Atsakymas iš AI

Neįmanoma (immutable) klasės kopijos kūrimas paprastai nereikalauja gilaus klonavimo, nes objekto būsena po kūrimo nepasikeičia.

Pagrindiniai aspektai:

  • Jei klasė iš tikrųjų yra nekeičiama, galima paprastai grąžinti nuorodą į tą patį objektą, nes jis nesikeis.
  • Jei reikia sukurti naują objektą su pakeista būsena, paprastai sukuriama nauja instancija su reikalingais parametrais.
  • Svarbu, kad visi laukai būtų final ir patys savaime nekeičiami (pavyzdžiui, String, primitivių tipų ar nekeičiamos kolekcijos).

Pavyzdys:

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() {
        // Galima paprastai grąžinti this, nes objektas nekeičiama
        return this;
    }

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

Todėl, nekeičiamos objekto kopijos arba nereikalingos, arba jos sukuriamos kaip naujas objektas su nauja būsena.