我有一个类,它的构造看起来像下面:
abstract class BasePanel extends JPanel {
public BasePanel(A a) {
// initializing fields from values passed to ctor
this.a = a;
// initializing gui components
initializeComponents();
setupPanels();
concludeUiSetup();
}
// stuff
}
在构造函数中,第一个是领域要与传递给构造函数值初始化初始化。 那么对于UI安装所需的其它方法被调用秩序。 这些方法中的两个需要在子类中重写为特定于它们的UI设置。
现在考虑一类FooPanel
扩展BasePanel
。 它需要在其构造几个初始化参数。
class FooPanel extends BasePanel {
public FooPanel(A a, B b) {
super(a);
this.b = b;
}
@Override
public void initializeComponents() {
super.initializeComponents();
// I require b here, but oops, b is not initialized at this point, and so
// this will throw NPE.
someTextField.setText(b.get());
}
// stuff
}
initializeComponents
此方法需要b
,不幸的是没有在这一点上初始化。
什么是重组这个代码,以便在适当的方式:
- 在需要之前,他们需要的字段设置。
- 使用该代码
FooPanel
(和其它图)不受此变化杂乱得多。
任何帮助极大的赞赏。 谢谢。