0

見出しから、同じ古い質問であると予想されますが、これは異なると信じてください。

私は EJB3 を使用していますが、もちろんそれをリモートで呼び出す必要がある場合は、すべてのデータ オブジェクトに Serializable インターフェイスを実装する必要があります。

問題は、ほとんどのデータ オブジェクトが (Velocity テンプレートを使用して) 生成され、コンパイルされ、パッケージ化されることです。今のところ、次のように、すべてのクラスでデフォルトの serialVersionUID をハードコーディングしました。

private static final long serialVersionUID = 1L;

しかし、次のことができる方法があるかどうか疑問に思っています。

private static final long serialVersionUID = getSerialUID();
private static long getSerialUID() {
    // Serial Version Algo code here
}

また、デフォルトの serialVersionUID を使用しても問題はありませんか? Algo を使用して一意の ID を生成する必要は本当にありますか?

4

2 に答える 2

1
  1. Default serialVersionUID の使用に問題はありますか?

    serialVersionUID同じクラスの複数のバージョンがない限り、デフォルトを使用しても問題はありません。

    読む: serialVersionUID とは何ですか? なぜそれを使用する必要があるのですか?

  2. Algo を使用して一意の ID を生成する必要は本当にありますか?

    答えはまたいいえです。アルゴリズムを使用して一意の ID を生成する必要はありません。同じクラスの異なるバージョンがある場合は、serialVersionUID として一意の番号を指定できます (例: serialVersionUID=123 と serialVersionUID=456)。

Javadoc java.io.Serializableを確認することを強くお勧めします

于 2012-12-19T09:52:39.733 に答える
1

最初の回答は役に立ちますが、クラス serialVersionUID を生成する方法はわかりません。クラスはすべて Velocity Template によって生成されるため、コード生成時に取得する必要があるため、次のようにしました。そこで、すべてのプロパティの hashcode() を取得し、最後に追加して serialVersionUID を取得するメソッドを作成しました。例えば;

public int getSerialVerionUID() {
    return getName().hashCode() + 
        getTypeName().hashCode() +
        getCardinality().hashCode() +
        getComplexity().hashCode();
}

そのため、プロパティのいずれかが変更されるとすぐに、異なる UID が得られ、それが探しているすべてです。

これが誰かに役立つことを願っています。

于 2012-12-20T17:13:17.973 に答える