我有一个对象类... lat说苹果。
每个苹果对象都有一个唯一的标识符(id)...我如何确保(优雅和有效)新创建的具有唯一ID。
由于
答案 0 :(得分:22)
在Apple类中有static int nextId
并在构造函数中递增它。
确保增量代码是原子代码可能是谨慎的,所以你可以做这样的事情(使用AtomicInteger)。这将保证如果两个对象完全同时创建,则它们不会共享相同的Id。
public class Apple {
static AtomicInteger nextId = new AtomicInteger();
private int id;
public Apple() {
id = nextId.incrementAndGet();
}
}
答案 1 :(得分:13)
使用java.util.UUID.randomUUID()
它不是int
,但保证是唯一的:
表示不可变的通用唯一标识符(UUID)的类。
如果您的对象以某种方式进行管理(例如通过某种持久性机制),则通常会出现管理器生成ID的情况 - 例如,从数据库中获取下一个ID。
相关:Jeff Atwood's article on GUIDs(UUID)。尽管如此,它与数据库有关,但从您的问题中不清楚您是否希望保留对象。
答案 2 :(得分:5)
您是否考虑过使用UUID课程?您可以调用randomUUID()函数每次创建一个新的id。
答案 3 :(得分:2)
还有另一种获取唯一ID的方法。而不是使用int或其他数据类型,只需创建一个类:
final class ID
{
@Override
public boolean equals(Object o)
{
return this==o;
}
}
public Apple
{
final private ID id=new ID();
}
没有同步的线程安全!