在Java中分配对象ID的优雅方式

我有一个对象类…拉特说苹果。

每个苹果对象都有一个唯一的标识符(id)…我如何确保(优雅和有效)新创建的具有唯一ID。

谢谢

在Apple类中有一个static int nextId并在构造函数中递增它。

确保增量代码是primefaces代码可能是谨慎的,所以你可以做这样的事情(使用AtomicInteger)。 这将保证如果两个对象完全同时创建,则它们不共享相同的Id。

 public class Apple { static AtomicInteger nextId = new AtomicInteger(); private int id; public Apple() { id = nextId.incrementAndGet(); } } 

使用java.util.UUID.randomUUID()

它不是int ,但保证是唯一的:

表示不可变通用唯一标识符(UUID)的类。


如果您的对象以某种方式进行管理(例如通过某种持久性机制),则通常会出现管理器生成ID的情况 – 例如,从数据库中获取下一个ID。

相关: Jeff Atwood关于GUID (UUID) 的文章 。 但是,它与数据库相关,但从您的问题中不清楚您是否希望保留对象。

你有没有想过使用UUID类。 您可以调用randomUUID()函数每次创建一个新的id。

还有另一种获取唯一ID的方法。 不要使用int或其他数据类型,只需创建一个类:

 final class ID { @Override public boolean equals(Object o) { return this==o; } } public Apple { final private ID id=new ID(); } 

线程安全无需同步!