我有抽象类:

public abstract class MyComposite extends Composite {

     protected abstract void initHandlers();
}


还有很多扩展它的类。如何确保在子类构造结束时将调用initHandlers()方法?子类示例:

public CollWidget extends MyComposite {
    public CollWidget() {
        /** Some stuff thats need to be done in this particular case */
        initHandlers(); // This method should be invoked transparently
    }

    @Override
    public void initHandlers() {
        /** Handlers initialisation, using some components initialized in constructor */
    }
}

最佳答案

由于父构造函数总是在子构造子之前(显式或隐式)调用,因此无法自动执行。

一种解决方法是:

public abstract class MyComposite {

    public MyComposite() {
        construct();
        initHandlers();
    }

    protected abstract void construct();

    protected abstract void initHandlers();

}

public class CollWidget extends MyComposite {

    @Override
    protected void construct() {
        // called firstly
    }

    @Override
    public void initHandlers() {
        // called secondly
    }

}

10-06 05:42
查看更多