创建的对象的ID生成器

时间:2011-10-05 11:14:16

标签: java object constructor

我需要一个创建对象的类,为每个创建的对象分配一个ID。此ID通常是类的int属性。我希望每次创建一个Object时都会增加这个值(ID),然后从1开始分配给该对象。这让我觉得我需要一个静态的int属性。

如何初始化此静态属性?

我应该创建一个单独的方法来增加在构造函数中调用的ID(作为ID生成器)吗?

一般来说,最有效和最精心设计的方式是什么?

3 个答案:

答案 0 :(得分:7)

就像你提到的那样使用static int作为id,并在创建新对象时增加它。

class MyObject {

    private static int counter = 0;

    public final int objectId;

    MyObject() {
        this.objectId = counter++;
    }
}

请注意,如果counter++由多个主题创建,则需要保护MyObject(例如,正如其他答案建议的那样使用AtomicInteger)。

答案 1 :(得分:5)

您也可以尝试java.util.concurrent.AtomicInteger,它会在

中生成ID
  1. 原子方式和
  2. 顺序
  3. 您可以在静态上下文中使用它,例如:

    private static final AtomicInteger sequence = new AtomicInteger();
    private SequenceGenerator() {}
    
    public static int next() {
        return sequence.incrementAndGet();
    }
    

答案 2 :(得分:4)

我建议使用AtomicInteger,这是线程安全的

class MyObject
{
    private static AtomicInteger uniqueId=new AtomicInteger();
    private int id;

    MyObject()
    {
       id=uniqueId.getAndIncrement();
    }

}