繁体   English   中英

抽象类构造函数中的抽象方法:设计缺陷?

[英]Abstract methods in an abstract class constructor: design flaw?

我有一个抽象类Entity 每个扩展Entity类都需要一些默认设置和一些可自定义的设置:

public abstract class Entity {

    protected Entity() {
        // ... default setup
        customSetup();
    }

    protected abstract void customSetup();
    // ...
}

我的扩展类MyEntity在构造函数中使用一个参数,该参数将在customSetup()

public class MyEntity extends Entity {

    private Data data;

    public MyEntity(Data d) {
        super(); // in here customSetup() is called!
        data = d;
    }

    @Override
    protected void customSetup() {
        codeDependingOn(data); // will throw NPE: data==null yet!
    }
}

正如评论所述,此代码不起作用。

我可以扔掉customSetup()并将所有自定义代码放在super() ,但是使用那个抽象方法可以更清楚地说明你应该放在那里。

我觉得我违反了一些OOP设计规则。 做我想要的正确方法是什么?

调用可以从构造函数覆盖的方法通常是个坏主意。 问题是该类尚未完全初始化,并且当在子类中调用该方法时,它可能会导致麻烦。

看看这个问题: 构造函数中的可覆盖方法调用有什么问题 ,它有一个很好的解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM