为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MM们 2023-05-17 16:44:04
我有一个抽象类。我希望每个实例都有一个唯一的 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 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

没有什么强制子类调用构造函数。


除非父构造函数在层次上构建错误,否则您无法阻止子类调用super()。


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


public MyAbstractClass() {

    id = nextId.incrementAndGet();

}


public MyAbstractClass(String s) {

    // ignores to call this();

}

否则,任何孩子最终都会调用super(), 并因此触发您的 id 初始化。


查看完整回答
反对 回复 2023-05-17
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信