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

use*_*247 17 java

我有一个对象类...拉特说苹果.

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

谢谢

Cod*_*nci 23

static int nextId在你的Apple类中有一个并在你的构造函数中增加它.

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

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

    public Apple() {
        id = nextId.incrementAndGet();
   }
}
Run Code Online (Sandbox Code Playgroud)

  • `nextId`应该是私有的,`id`应该是最终的. (5认同)

Boz*_*zho 13

使用 java.util.UUID.randomUUID()

它不是int,但保证是独一无二的:

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


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

相关:Jeff Atwood关于GUID(UUID)的文章.但是,它与数据库相关,但是从您的问题中不清楚您是否希望保留对象.


Ami*_*far 5

你有没有想过使用UUID类.您可以调用randomUUID()函数每次创建一个新的id.