Sobes.tech
Junior — Middle

Ποια στοιχεία πρέπει να ληφθούν υπόψη κατά τη δημιουργία αντιγράφου ενός αντικειμένου μιας αμετάβλητης κλάσης;

sobes.tech AI

Απάντηση από AI

Για μια αμετάβλητη (immutable) κλάση, η δημιουργία ενός αντιγράφου του αντικειμένου γενικά δεν απαιτεί βαθύ κλωνοποίηση, καθώς η κατάσταση του αντικειμένου δεν αλλάζει μετά τη δημιουργία.

Βασικά σημεία:

  • Αν η κλάση είναι πραγματικά αμετάβλητη, μπορείτε απλά να επιστρέψετε την αναφορά στο ίδιο αντικείμενο, καθώς δεν θα αλλάξει.
  • Αν χρειάζεται να δημιουργήσετε ένα νέο αντικείμενο με τροποποιημένη κατάσταση, συνήθως δημιουργείτε μια νέα παρουσία με τις απαραίτητες παραμέτρους.
  • Είναι σημαντικό όλα τα πεδία να είναι τελικά και από μόνα τους αμετάβλητα (π.χ., String, primitive τύποι ή αμετάβλητες συλλογές).

Παράδειγμα:

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() {
        // Μπορείτε απλά να επιστρέψετε αυτό, καθώς το αντικείμενο είναι αμετάβλητο
        return this;
    }

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

Επομένως, η αντιγραφή ενός αμετάβλητου αντικειμένου είτε δεν είναι απαραίτητη είτε δημιουργείται ως νέο αντικείμενο με νέο κράτος.