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);
}
}
Επομένως, η αντιγραφή ενός αμετάβλητου αντικειμένου είτε δεν είναι απαραίτητη είτε δημιουργείται ως νέο αντικείμενο με νέο κράτος.