는 다음과 같은 구조 (간체)가 있다고 가정인터페이스 구현 및 Java 직렬화
class Impl3 implements Inter, Serializable
{
private static final long serialVersionUID = ...;
//...
}
을 ... 그리고 세 개의 클래스와 끝까지 MyClass.interInstance가 가정 할 수 있습니다.
이미 직렬화 된 MyClass 개체에 영향을 주어야합니까?
사용자가 (Android 앱) 위와 같은 변경 사항을 모방 한 업데이트 후에 일부 직렬화 된 객체를 열 수 없다는 불만을 제기했기 때문에이를 묻습니다 (예 : 인터페이스의 새로운 직렬화 가능 구현을 추가 한 경우).).
내 말은 MyClass (interInstance)에 Impl1 또는 Impl2 (둘 다 직렬화 가능)가 될 수있는 필드를 가질 수 있다는 것입니다. 나중에 세 번째 구현 (Impl3)을 추가하면 MyClass 인스턴스의 interInstance가 Impl1, Impl2 또는 Impl3이 될 수 있습니다. 문제는 Impl3 이전에 생성 된 파일에서 직렬화 된 객체를 읽는 동안이 추가가 영향을 미칠 수 있는지 여부입니다. – user1987392
@ user1987392 그것은 영향에 의한 의미에 달려 있습니다. 직렬화 된 객체는 변경되지 않지만 어떻게 작성 했는가? Impl2로 객체를 직렬화하는 경우 Impl2로도 역 직렬화해야하며 Impl3으로는 역 직렬화해야합니다. – Sajmon
임팩트에 의해, ObjectInputStream는 직렬화 된 오브젝트가 Impl1 또는 Impl2를 interInstance로서 가지는 파일을 (구) 계속 읽어 낼 수 있습니다. – user1987392