Java中分配对象id的优雅方式 10 月,2 周 Questions & Answers 19480 我有一个对象类。。。那就说苹果吧 每个apple对象都必须有一个唯一的标识符(id)。。。我如何确保(优雅而高效地)新创建的id是唯一的 谢谢
# 2 楼答案 在Apple类中有一个static int nextId,并在构造函数中增加它 确保递增代码是原子代码可能是谨慎的,因此可以这样做(使用AtomicInteger)。这将保证如果两个对象完全同时创建,它们不会共享相同的Id public class Apple { static AtomicInteger nextId = new AtomicInteger(); private int id; public Apple() { id = nextId.incrementAndGet(); } }
# 3 楼答案 使用java.util.UUID.randomUUID() 它不是int,但保证是唯一的: A class that represents an immutable universally unique identifier (UUID). 如果以某种方式管理对象(例如通过某种持久性机制),那么管理器通常会生成id,例如从数据库中获取下一个id 相关:Jeff Atwood's article on GUIDs(UUIDs)。虽然它与数据库相关,但从您的问题中不清楚您是否希望对象被持久化
# 4 楼答案 还有另一种获取唯一ID的方法。不使用int或其他数据类型,只需创建一个类: final class ID { @Override public boolean equals(Object o) { return this==o; } } public Apple { final private ID id=new ID(); } 线程安全,无需同步
# 1 楼答案
你想过使用UUID类吗。每次都可以调用randomUUID()函数来创建一个新的id
# 2 楼答案
在Apple类中有一个
static int nextId
,并在构造函数中增加它确保递增代码是原子代码可能是谨慎的,因此可以这样做(使用AtomicInteger)。这将保证如果两个对象完全同时创建,它们不会共享相同的Id
# 3 楼答案
使用
java.util.UUID.randomUUID()
它不是
int
,但保证是唯一的:如果以某种方式管理对象(例如通过某种持久性机制),那么管理器通常会生成id,例如从数据库中获取下一个id
相关:Jeff Atwood's article on GUIDs(UUIDs)。虽然它与数据库相关,但从您的问题中不清楚您是否希望对象被持久化
# 4 楼答案
还有另一种获取唯一ID的方法。不使用int或其他数据类型,只需创建一个类:
线程安全,无需同步