또 다른 옵션은 소스 객체의 복사 방법, 예를 구현하는 것입니다
class Thing implements Has3DCoords {
private Point3D loc;
// ...
void setLocation(double x, double y, double z) {
loc.setLocation(x, y, z);
// or: loc = new Point3D(x, y, z);
}
void copyCoordsTo(Has3DCoords dest) {
loc.copyCoordsTo(dest);
// or: dest.setLocation(loc.getX(), loc.getY(), loc.getZ());
}
OtherThing createOtherThing() {
OtherThing result = new OtherThing();
this.copyCoordsTo(result);
return result;
}
}
를이 될 수 있습니다 유용 할 경우 :
- 전체 개체를 복제하는 것이 적절하지 않습니다. 너무 자주 하나 개의 단위로 복사됩니다 관련 속성 그룹이 있습니다
- 는
- 당신은
Thing
- 속성의 수는 큰의 속성으로
loc
을 노출하고 싶지 않은 (또는 많은 그런 그룹이 있습니다) 모든 매개 변수를 매개 변수로 요구하는 생성자는 다루기 힘들 수 있습니다.
왜 clone() 및 Cloneable을 사용하지 않으시겠습니까? –
@Thomas Owens, 여기를 참조하십시오. http://www.artima.com/intv/bloch13.html – Yishai
답변으로 복사 생성자가 해결책으로 표시됩니다. 복사 생성자가 모든 사례를 올바르게 처리하지 못합니다. 예를 들어 구체적인 클래스를 모르는 경우 (하지만 복제/복사/whateveryoucallit 메서드 내에서 여전히 복사 생성자를 사용할 수 있습니다). –