有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中分配对象id的优雅方式

我有一个对象类。。。那就说苹果吧

每个apple对象都必须有一个唯一的标识符(id)。。。我如何确保(优雅而高效地)新创建的id是唯一的

谢谢


共 (4) 个答案

  1. # 1 楼答案

    你想过使用UUID类吗。每次都可以调用randomUUID()函数来创建一个新的id

  2. # 2 楼答案

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

    确保递增代码是原子代码可能是谨慎的,因此可以这样做(使用AtomicInteger)。这将保证如果两个对象完全同时创建,它们不会共享相同的Id

    public class Apple {
        static AtomicInteger nextId = new AtomicInteger();
        private int id;
    
        public Apple() {
            id = nextId.incrementAndGet();
       }
    }
    
  3. # 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. # 4 楼答案

    还有另一种获取唯一ID的方法。不使用int或其他数据类型,只需创建一个类:

    final class ID
    {
      @Override
      public boolean equals(Object o)
      {
         return this==o;
      }
    }
    
    public Apple
    {
      final private ID id=new ID();
    }
    

    线程安全,无需同步