2011-09-12 11 views
1

최근에 serialVersionUID를 사용하여 같은 클래스의 다른 버전을 serialization/deserialization과 호환 가능하게 만드는 것이 Java 5 이상에서 필요하지 않다는 의견을 읽었습니다. 이 올바른지? 어쩌면 공변 반환 유형이 섞여있을 수도 있습니다. 그래서 여러분 모두와 함께 그것을 확인하고 싶었습니다.Java 5 이상에서 serialVersionUID가 더 이상 필요하지 않습니까?

+0

관련 링크를 게시 할 수 있습니까? – Santosh

+0

불행히도 해당 링크에 액세스 할 수 없습니다. 콘텐츠가 삭제되었을 수도 있습니다. – shrini1000

답변

5

JavaDocs for Java 5 여전히이 필요하다고 주장한다 :

직렬화 가능 클래스가 명시 적으로 serialVersionUID를 선언하지 않는 경우, 직렬화 런타임이 클래스의 다양한 측면을 기준으로 그 클래스에 대한 기본 serialVersionUID의 값을 계산합니다 Java (TM) Object Serialization Specification에 설명되어 있습니다. 그러나 기본 serialVersionUID 계산은 컴파일러 구현에 따라 달라질 수있는 클래스 세부 정보에 매우 민감하므로 deserialization 중에 예기치 않은 InvalidClassExceptions이 발생할 수 있으므로 모든 serializable 클래스에서 serialVersionUID 값을 명시 적으로 선언하는 것이 좋습니다. 따라서 서로 다른 Java 컴파일러 구현에서 일관된 serialVersionUID 값을 보장하려면 직렬화 가능 클래스가 명시 적 serialVersionUID 값을 선언해야합니다. 또한 명시 적 serialVersionUID 선언은 가능한 경우 private 한정자를 사용합니다. 이러한 선언은 즉시 선언하는 클래스에만 적용되므로 serialVersionUID 필드는 상속 된 멤버로 유용하지 않습니다.

+4

심지어 [Java 7 docs] (http://download.oracle.com/javase/7/docs/api/java/io/Serializable.html)에도 같은 면책 조항이 있습니다. –

3

Java 1.4부터 대부분의 다른 직렬화 라이브러리와 마찬가지로을 serialization에 사용할 수 있었으며 serialVersionUID를 무시합니다.

그러나 ObjectOutputStream을 사용하는 경우 serialVersionUID의 사용법은 변경되지 않았습니다.

관련 문제