Sobes.tech
Junior — Middle

Milliseid aspekte tuleks arvestada muutumatute klasside objekti koopiat tehes?

sobes.tech AI

Vastus AI-lt

Kujul muutumatul (immutable) klassi objekti koopiate loomine ei nõua tavaliselt sügavat kloonimist, kuna objekti seisund ei muutu pärast loomist.

Peamised aspektid:

  • Kui klass on tõesti muutumatu, saab lihtsalt tagastada viite samale objektile, kuna see ei muutu.
  • Kui on vaja luua uus objekt muudetud seisundiga, luuakse tavaliselt uus eksemplar vajalike parameetritega.
  • Oluline on, et kõik väljad oleksid final ja ise ka muutumatud (näiteks String, primitiivsed tüübid või muutumatud kogud).

Näide:

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() {
        // Võib lihtsalt tagastada this, kuna objekt on muutumatu
        return this;
    }

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

Seega, muutumatute objektide koopia või ei ole vajalik või luuakse uus objekt uue seisundiga.