feat(hw-01): implement immutable class with defensive copying

- add MutableClass copy constructor
- add defensive copies in ImmutableClass constructor and getter
- extend immutable class with additional fields
- update task requirements
This commit is contained in:
user
2026-07-30 22:21:49 +04:00
parent 945cb0fcbe
commit 41f852bca6
4 changed files with 52 additions and 27 deletions
+27
View File
@@ -0,0 +1,27 @@
import java.util.Objects;
final class ImmutableClass {
ImmutableClass(MutableClass firstField, String secondField, Integer thirdField) {
this.firstField = new MutableClass(Objects.requireNonNull(firstField));
this.secondField = secondField;
this.thirdField = thirdField;
}
public MutableClass getFirstField() {
return new MutableClass(firstField);
}
public String getSecondField() {
// Копировать не нужно так как String является Immutable
return secondField;
}
public Integer getThirdField() {
// Копировать не нужно так как Integer является Immutable
return thirdField;
}
private final MutableClass firstField;
private final String secondField;
private final Integer thirdField;
}
+20
View File
@@ -0,0 +1,20 @@
class MutableClass {
MutableClass(int value) {
this.setValue(value);
}
// Конструктор копирования
public MutableClass(MutableClass other) {
this.value = other.value;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
private int value;
}
-27
View File
@@ -1,27 +0,0 @@
class MutableClass {
MutableClass(int value) {
this.setValue(value);
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
private int value;
}
final class ImmutableClass {
ImmutableClass(MutableClass field) {
this.field = new MutableClass(field.getValue());
}
public MutableClass getField() {
return new MutableClass(field.getValue());
}
private final MutableClass field;
}
+5
View File
@@ -2,3 +2,8 @@
Реализовать свой иммутабельный класс, который будет
внутри себя содержать поле с изменяемым классом.
## UPDATED
Иммутабельный класс должен содержать минимум 3 различных поля, включая поле с
изменяемым классом.