我有一个抽象类。我希望每个实例都有唯一的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?
答案 0 :(得分:2)
没有什么可以迫使子类调用构造函数。
除非父级构造函数的构造错误,否则您无能为力阻止子类调用super()
。
“在层次上是错误的”,我的意思是有一个父构造器不基于其无参数构造器。例如,
public MyAbstractClass() {
id = nextId.incrementAndGet();
}
public MyAbstractClass(String s) {
// ignores to call this();
}
否则,任何孩子最终都会呼叫super()
,从而触发您的ID初始化。