나는 주위를 둘러 보았고 몇 가지 팁을 보았지만 여전히 내 문제의 해결책을 찾지 못했습니다. 기존 자바 객체에 대한 참조를 작성하는 대신 기존 Java 객체를 복사해야합니다. 클래스에 액세스 할 수 없으며 부모 클래스를 통해 복제 메서드를 구현합니다.이 메서드는 실제로 참조를 만듭니다. "serialization/deserialization"라우트로 이동하려고 시도했지만 어느 정도는 작동했지만 복사본은 원래의 것과 정확히 동일하지 않습니다. 이 작업을 수행 할 수 있습니까? 미리 감사드립니다. 데이비드Java로 개체를 복사하는 방법은 무엇입니까?
답변
을하려고하면 안되며, 당신은 할 수 없습니다.
왜 안 :esp는 cloned- 안 객체가 있습니다. 소프트웨어 컨트롤 외부의 리소스를 참조하는 사용자는 복제를 통해 혼란을 야기 할 수 있습니다.
왜 당신은 할 수 없습니다
: 객체가 참조하는 모든 개체가 복제되는 경우직렬화 및 역 직렬화에만 작동합니다 직렬화합니다. 당신은 새로운 객체와 인스턴스화하여 깊은 클론을 만들 반사를 사용하는 몇 가지 코드를 작성할 수
깊은 복제 재귀 적으로 모든 필드, 그러나 깊은이 객체 복제 할 수있는 방법을 구현하는 시도 :
public class Evil {
public Evil() {
throw new RuntimeException();
}
}
을
문제의 핵심은 내가 실수하지 않는다면 리플렉션을 통한 복제는 항상 Reflection을 통해 생성자를 호출하는 것에 달려 있으며 생성자는 작동하도록 보장되지 않는다는 것입니다.
그러나 대부분의 경우이 방법은 대부분의 개체를 복제합니다. 그러나 당신은 여전히 그것을해서는 안됩니다! 이 작업에 대한 올바른 시나리오를 생각할 수 없습니다.
편집 : 또한 일부 주석가들은 "충실한 사본"이 매우 불명확하다고 지적했기 때문에.
편집 2 : 결론 : 클래스 만 복제 가능해야하는지와 어떻게해야 하는지를 알 수 있습니다.
는 일반적인 경우에 Java deep cloning library
Cloner cloner = new Cloner();
cloner.deepClone(object);
그것은 그것의 요구에 부응한다면 이것은 흥미로운 것으로 보인다. 이 라이브러리를 살펴 보겠습니다. 감사합니다! –
- 1. 람다식이 포함 된 개체를 딥 복사하는 방법은 무엇입니까?
- 2. 배열을 복사하는 방법은 무엇입니까?
- 3. 이미지를 복사하는 방법은 무엇입니까?
- 4. Java로 패키지를 문서화하는 방법은 무엇입니까?
- 5. Java로 사운드를 처리하는 방법은 무엇입니까?
- 6. Java로 이벤트를 보내는 방법은 무엇입니까?
- 7. Java로 RMAN에 연결하는 방법은 무엇입니까?
- 8. Java로 GUI를 만드는 방법은 무엇입니까?
- 9. Java로 타이머를 만드는 방법은 무엇입니까?
- 10. Java로 양식을 처리하는 방법은 무엇입니까?
- 11. varchar를 java로 변환하는 방법은 무엇입니까?
- 12. Java로 쿠키를 얻는 방법은 무엇입니까?
- 13. struct 파일을 복사하는 방법은 무엇입니까?
- 14. istringstream을 효율적으로 복사하는 방법은 무엇입니까?
- 15. 기록에서 명령을 복사하는 방법은 무엇입니까?
- 16. matplotlib 그림을 복사하는 방법은 무엇입니까?
- 17. Java로 동적으로 객체 이름을 지정하는 방법은 무엇입니까?
- 18. 배열의 마지막 객체를 다른 배열에 복사하는 방법은 무엇입니까?
- 19. 어린이 개체를 반환하는 방법은 무엇입니까?
- 20. 개체를 int로 변환하는 방법은 무엇입니까?
- 21. 모양 개체를 캐스팅하는 방법은 무엇입니까?
- 22. 캔버스에서 개체를 제거하는 방법은 무엇입니까?
- 23. 개체를 전역으로 저장하는 방법은 무엇입니까?
- 24. 개체를 이중으로 변환하는 방법은 무엇입니까?
- 25. googlemap 개체를 삭제하는 방법은 무엇입니까?
- 26. 개체를 제네릭에 캐스팅하는 방법은 무엇입니까?
- 27. 값 개체를 저장하고로드하는 방법은 무엇입니까?
- 28. 개체를 부분으로 전달하는 방법은 무엇입니까?
- 29. 개체를 linq join하는 방법은 무엇입니까?
- 30. 클래스 개체를 초기화하는 방법은 무엇입니까?
"FAITHFUL"을 정의하십시오. 이것은 예술 용어는 아닙니다. –
딥 클로 링 (deep cloing) 라이브러리를 확인하셨습니까? http://robust-it.co.uk/clone/ –
이것은 일반적으로 나쁜 생각입니다. 내 말은, 너는 얕은 사본이나 깊숙한 사본을 원하니? 얼마나 깊은가요? 전체 프로그램을 복사해야합니까? 그 파일의 복사본이 없다면 복사해서는 안되는 것을 참조하지 않는다는 것을 어떻게 알 수 있습니까? 실제로 사용할 수있는 다른 디자인이 있습니까? –