4

このようなクラスがある場合:

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;
}

または、これを理解するための優れたツールはありますか?

4

3 に答える 3

8

はい、変更されserialVersionUIDます。

コマンドラインツールを使用できますserialver-少なくともSunのJDKserialVersionUIDでは、特定のコンパイル済みクラスのを計算できます。

于 2009-06-15T23:25:01.940 に答える
1

はい、変わります。簡単な方法は Eclipse です。クラスが Serializable を実装し、serialVersionUID フィールドを指定しない場合、IDE は警告記号を表示します。警告サインをクリックして、[生成されたシリアル バージョン UID を追加] を選択できます。これにより、serialVersionUID が計算され、コードに挿入されます。

于 2009-06-15T23:32:54.620 に答える
0

Bean のテストを開始したとき、署名が変更されたときだけでなく、クラスがコンパイルされたときに serialVersionUID が再生成されたように思えました。その理由は、maven ビルドと、新しいビルドの前に古いクラスが削除されたという事実である可能性があります。

于 2009-06-16T03:54:41.263 に答える