我需要识别数据并将其序列化。
以下标识符不适合,因为静态字段未序列化:
public class MyClass implements Serializable {
private static int inc = 0;
private int id;
public MyClass() {
this.id = inc++;
}
}
在这种情况下识别对象的最佳方法是什么?
我需要识别数据并将其序列化。
以下标识符不适合,因为静态字段未序列化:
public class MyClass implements Serializable {
private static int inc = 0;
private int id;
public MyClass() {
this.id = inc++;
}
}
在这种情况下识别对象的最佳方法是什么?
您需要将生成器值存储在其他地方。在数据库或文件中(在这两种情况下都提供对生成器的原子访问)。
或者,或者,使用 UUID 来识别
更新
正如我在这里得到纠正的那样,
randomUUID()
标准类方法会UUID
生成版本 4 UUID。那些。随机值集。而且虽然两个生成值重合的概率很小,但确实如此。要获得保证唯一的 UUID,您需要生成任何其他版本(1、2、3、5)的 UUID。它们基于当前时间和唯一的机器 ID。
不幸的是,标准类无法生成它们。但是您可以连接可以执行此操作的外部库。例如JUG (java-uuid-generator)
你必须这样做:
在这种情况下:
transient
)在@AntonShchyrov 的示例中,基于随机性的生成并不能保证标识符的唯一性