나는 클래스 라이브러리를 개발 중이다.불변 클래스를위한 clone() 구현
- 몇 가지 기본 방법에 대한 구현을 제공하는 행렬에 대한 추상 기본 클래스 Matrix가 있습니다.
- Matrix에서 파생 된 것은 다양한 유형의 행렬에 대한 구체적인 하위 클래스입니다.
- 매트릭스가 복제 가능해야한다는 요구 사항이 있으므로 Matrix는 Cloneable 인터페이스를 구현합니다.
- 는 매트릭스로부터 유도 된 클래스 중 일부
이 대신에 오브젝트의 복제를 반환 객체 자체가 반환 불변 클래스 '복제 방법 허용 될 불변?
설명에 대한 몇 가지 (간략화 됨) 코드 : 나는 충분하다 super.clone()
를 호출 생각했을 것이다
abstract class Matrix implements Cloneable {
...
}
class ImmutableMatrix extends Matrix {
ImmutableMatrix clone() {
return this;
}
...
}
class SomeOtherMatrix extends Matrix {
SomeOtherMatrix clone() {
SomeOtherMatrix other = super.clone();
...
return other;
}
...
}
왜 처음부터 개체를 복제 할 수 있습니까? –
원래 행렬 주위에 작은 래퍼를 반환하고 즉시 값을 계산하면 일부 작업 (예 : 전치)을 쉽게 구현할 수 있습니다. 또한 일부 상황 (예 : 거대한 행렬의 연산)에서 메모리 풋 프린트를 줄일 수 있습니다. 원래의 행렬이 변경되지 않는 한 이것은 잘 작동합니다. 그렇지 않으면 원본 행렬을 변경하면 결과에 부작용이 발생합니다. 하지만 이제 불변의 서브 클래스에 대해서만 객체 자체를 리턴하는 getImmutable() 메소드를 제공함으로써이를 해결했습니다. 반면 변경 가능한 서브 클래스는 불변의 사본을 리턴합니다. 더 이상 복제 할 필요가 없습니다. – Axel