arj*_*soh 9 java constructor object
我需要一个创建对象的类,为每个创建的对象分配一个ID.此ID通常是类的int属性.我想每次创建一个Object时增加这个值(ID),然后从1开始分配给该对象.我觉得我需要一个静态int属性.
如何初始化此静态属性?
我应该创建一个单独的方法来增加在构造函数中调用的ID(作为ID生成器)吗?
一般来说,最有效和最精心设计的方式是什么?
就像你提到的那样使用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其他答案建议).
您也可以尝试java.util.concurrent.AtomicInteger,它会生成ID
您可以在静态上下文中使用它,例如:
private static final AtomicInteger sequence = new AtomicInteger();
private SequenceGenerator() {}
public static int next() {
return sequence.incrementAndGet();
}
Run Code Online (Sandbox Code Playgroud)
我建议使用AtomicInteger,这是线程安全的
class MyObject
{
private static AtomicInteger uniqueId=new AtomicInteger();
private int id;
MyObject()
{
id=uniqueId.getAndIncrement();
}
}
Run Code Online (Sandbox Code Playgroud)