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:
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -2,3 +2,8 @@
|
|||||||
|
|
||||||
Реализовать свой иммутабельный класс, который будет
|
Реализовать свой иммутабельный класс, который будет
|
||||||
внутри себя содержать поле с изменяемым классом.
|
внутри себя содержать поле с изменяемым классом.
|
||||||
|
|
||||||
|
## UPDATED
|
||||||
|
|
||||||
|
Иммутабельный класс должен содержать минимум 3 различных поля, включая поле с
|
||||||
|
изменяемым классом.
|
||||||
|
|||||||
Reference in New Issue
Block a user