我需要一个创建对象的类,为每个创建的对象分配一个ID。此ID通常是类的int属性。我希望每次创建一个Object时都会增加这个值(ID),然后从1开始分配给该对象。这让我觉得我需要一个静态的int属性。
如何初始化此静态属性?
我应该创建一个单独的方法来增加在构造函数中调用的ID(作为ID生成器)吗?
一般来说,最有效和最精心设计的方式是什么?
答案 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您可以在静态上下文中使用它,例如:
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();
}
}