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

时间:2010-10-24 17:59:01

标签: java

我有一个对象类... lat说苹果。

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

由于

4 个答案:

答案 0 :(得分:22)

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

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

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

    public Apple() {
        id = nextId.incrementAndGet();
   }
}

答案 1 :(得分:13)

使用java.util.UUID.randomUUID()

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

  

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


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

相关:Jeff Atwood's article on GUIDs(UUID)。尽管如此,它与数据库有关,但从您的问题中不清楚您是否希望保留对象。

答案 2 :(得分:5)

您是否考虑过使用UUID课程?您可以调用randomUUID()函数每次创建一个新的id。

答案 3 :(得分:2)

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

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

public Apple
{
  final private ID id=new ID();
}

没有同步的线程安全!