在抽象类上实现ID的一种优雅方法

时间:2019-08-06 22:00:40

标签: java oop

我有一个抽象类。我希望每个实例都有唯一的ID。我已经实现了:

public abstract class MyAbstractClass{

    static AtomicInteger nextId = new AtomicInteger();
    private int id;

    public MyAbstractClass() {
        id = nextId.incrementAndGet();
    }
}
public class MyClass extends MyAbstractClass {

       public MyClass(){
             super();
       }
}

除了没有什么可以迫使子类调用构造函数的部分以外,这种方法行之有效。

是否可以为抽象类实现全局ID?

1 个答案:

答案 0 :(得分:2)

  

没有什么可以迫使子类调用构造函数。

除非父级构造函数的构造错误,否则您无能为力阻止子类调用super()

“在层次上是错误的”,我的意思是有一个父构造器不基于其无参数构造器。例如,

public MyAbstractClass() {
    id = nextId.incrementAndGet();
}

public MyAbstractClass(String s) {
    // ignores to call this();
}

否则,任何孩子最终都会呼叫super(),从而触发您的ID初始化。