创建的对象的ID生成器

arj*_*soh 9 java constructor object

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

如何初始化此静态属性?

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

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

dac*_*cwe 8

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

class MyObject {

    private static int counter = 0;

    public final int objectId;

    MyObject() {
        this.objectId = counter++;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,counter++如果MyObject由多个线程创建,则需要保护(例如,使用AtomicInteger其他答案建议).


And*_*eas 6

您也可以尝试java.util.concurrent.AtomicInteger,它会生成ID

  1. 原子方式和
  2. 顺序

您可以在静态上下文中使用它,例如:

private static final AtomicInteger sequence = new AtomicInteger();
private SequenceGenerator() {}

public static int next() {
    return sequence.incrementAndGet();
}
Run Code Online (Sandbox Code Playgroud)


Bar*_*ica 5

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

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

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

}
Run Code Online (Sandbox Code Playgroud)