猿问

在抽象类上实现 ID 的优雅方式

我有一个抽象类。我希望每个实例都有一个唯一的 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?


MM们
浏览 167回答 1
1回答

守着一只汪

没有什么强制子类调用构造函数。除非父构造函数在层次上构建错误,否则您无法阻止子类调用super()。通过“层次结构错误”,我的意思是有一个不基于其无参数构造函数的父构造函数。例如,public MyAbstractClass() {    id = nextId.incrementAndGet();}public MyAbstractClass(String s) {    // ignores to call this();}否则,任何孩子最终都会调用super(), 并因此触发您的 id 初始化。
随时随地看视频慕课网APP

相关分类

Java
我要回答