2017-12-28 38 views
-1

수정할 수없는 클래스의 객체가 있습니다.순환 종속성을 사용하여 기존 Java 객체 직렬화

개체의 순환 종속성이 있습니다.

개체를 직렬화하고 싶습니다. 자바 소스 코드에 액세스 할 수 없습니다 (라이브러리에 있음).

C++에서는 하위 클래스를 만들고 가상 메서드를 재정의 한 다음 원하는대로 동작하도록 캐스트 할 수있었습니다. Java에서는 이것이 불가능합니다.

새로운 POJO 클래스를 만들고 모든 필드를 손으로 복사하는 것 외에 어떤 옵션이 있습니까?

+0

http://www.baeldung.com/jackson-deserialization 그래서 객체가 Serializable' 나는 감히 '아니다, 질문에 대한 해결책은, 예를 들어, 멀리 구글을 의미합니다. –

+0

아니요, 아니요 ... –

+0

리플렉션을 사용하고 모든 필드를 반복적으로 복사 할 수 있으며 사이클을 확인하는 데 'IdentityHashMap'을 사용할 수 있습니다. 그러나 누군가 이미 이미 그렇게했습니다. https://stackoverflow.com/a/5294224/581205 – maaartinus

답변

0

어쨌든 Serializable을 사용하는 직렬화는 약간의 냄새가 난다. JSON (예 : Jackson, GSON) 또는 이진 형식 (예 : Kryo)을 사용하여 외부 시리얼 라이저를 사용하는 것이 좋습니다. 어느 쪽이든, 순환 종속성을 해결하는 모든 사용자 정의 serializer를 작성할 수 있습니다.

+0

클래스에 주석을 달지 않고 순환 종속성을 어떻게 해결합니까? –

+0

내가 나열한 모든 기술은 외부에서 종속성을 해결하는 외부 직렬 변환기를 지원합니다. 어떻게해야하는지는 당신에게 달려 있지만, 객체 목록을 객체 ID 목록으로 직렬화하고, 지속성 계층에서이 ID로 객체를로드하여 다시 직렬화 할 수 있습니다. –

+0

예제가 있습니까? –

0

개체를 읽거나 쓰는 유일한 사람이 되더라도 Jackson을 선택합니다.

  1. 직렬화 된 JSON을 진단/디버깅하면 손쉽게 문제를 해결할 수 있습니다. 이 잘 다져진 길에 머무는