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
}

另外,使用 Default 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 回答