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.