仅出于思考练习的目的,如何为给定类的每个实例强制执行属性的唯一性?
这里的唯一性可以定义为在单个 JVM 上和在单个用户 session 中。
这是 Java 级别的,与数据库无关,主要目的是验证是否发生了冲突。
第一个明显的步骤是在类级别拥有一个静态属性。
- 随着实例数量的增加,拥有 ArrayList 或其他容器似乎不切实际。
- 在类级别递增数字计数器似乎是最简单的方法,但 ID 必须始终跟在最后使用的 ID 之后。
- 强制执行哈希或非数字 ID 可能会出现问题。
- 并发性可能是个问题。如果两个实例有可能同时获得一个 ID,那么应该避免这种情况。
应该如何解决这个问题?可能已经存在哪些解决方案/方法?
最佳答案
如果您关心性能,这里有一个线程安全、快速(无锁)和无冲突的唯一 ID 生成版本
public class Test {
private static AtomicInteger lastId = new AtomicInteger();
private int id;
public Test() {
id = lastId.incrementAndGet();
}
...
关于java - 在类中强制使用唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15194851/