2009-06-15 3 views
3

만약 내가 같은 클래스 :메소드를 추가하면 클래스에 java-computed serialVersionUid가 변경됩니까?

public class Name implements Serializable { 
    private final String firstName; 
    private final String lastName; 

    public Name(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 
} 

의 내가 다른 방법 (및 추가 필드)를 추가하는 경우 변경의 serialVersionUID 계산합니까? 또한

public String getFullName() { 
    return firstName + " " + lastName; 
} 

,이 파악을위한 좋은 도구가 : 예를 들어

, 방법을 추가?

답변

7

예, 변경됩니다 serialVersionUID.

serialver 명령 줄 도구를 사용할 수 있습니다. 최소한 Sun의 JDK에서는 주어진 컴파일 된 클래스에 대해 serialVersionUID을 계산할 수 있습니다.

+0

빠른 응답을 보내 주셔서 감사합니다! 이 문제를 확인하기 위해 serialver 도구를 사용할 수있었습니다. 이전 : serialVersionUID = 7949745139928005557L. 이후 : serialVersionUID = 7699267648627402486L입니다. –

+1

UID는 사용되는 Java 컴파일러에 따라 다를 수도 있습니다. –

+0

물론 올바른 메소드 이름을 선택하면 동일한 UID를 다시 얻을 수 있습니다. –

1

예, 변경됩니다. 쉬운 방법은 Eclipse입니다. 클래스가 Serializable을 구현하고 serialVersionUID 필드를 제공하지 않으면 IDE는 경고 기호를 표시합니다. 경고 기호를 클릭하고 "생성 된 직렬 버전 UID 추가"를 선택할 수 있습니다. 이렇게하면 serialVersionUID가 계산되어 코드에 삽입됩니다.

+0

Eclipse가 Serializable 클래스뿐만 아니라 모든 클래스에 대해이 경고를 생성 할 수 있다고 생각합니다. –

0

콩을 테스트하기 시작했을 때 으로 컴파일 될 때 serialVersionUID가 재생성 된 것은 나뿐 인 것 같습니다. 서명이 변경되었을 때뿐만 아니라. 그 이유는 메이븐 빌드와 새 빌드 전에 이전 클래스가 삭제 되었기 때문일 수 있습니다.

관련 문제