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() {
// Կարող եք պարզապես վերադարձնել this, քանի որ օբյեկտը անփոփոխ է
return this;
}
public ImmutablePoint withX(int newX) {
return new ImmutablePoint(newX, this.y);
}
}
Այսպիսով, անփոփոխ օբյեկտի պատճենը կամ անհրաժեշտ չէ, կամ ստեղծվում է որպես նոր օբյեկտ նոր վիճակով։