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() {
        // Կարող եք պարզապես վերադարձնել this, քանի որ օբյեկտը անփոփոխ է
        return this;
    }

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

Այսպիսով, անփոփոխ օբյեկտի պատճենը կամ անհրաժեշտ չէ, կամ ստեղծվում է որպես նոր օբյեկտ նոր վիճակով։