我有一个Wicket页面类,它根据抽象方法的结果设置页面标题。
public abstract class BasicPage extends WebPage {
public BasicPage() {
add(new Label("title", getTitle()));
}
protected abstract String getTitle();
}
NetBeans警告我“构造函数中可重写的方法调用”,但它应该有什么问题?我能想到的唯一替代方法是将其他抽象方法的结果传递给子类中的超级构造函数。但这可能很难理解,因为有很多参数。
发布于 2010-08-04 17:49:05
在构造函数中调用可覆盖方法会允许子类破坏代码,因此您不能保证它会继续工作。这就是为什么你会得到一个警告。
在您的示例中,如果一个子类覆盖了getTitle()
并返回null,会发生什么?
要“修复”这个问题,你可以使用factory method而不是构造函数,这是对象实例化的常见模式。
发布于 2010-08-04 17:44:41
如果在构造函数中调用子类覆盖的方法,这意味着如果在构造函数和方法之间逻辑上划分初始化,则不太可能引用尚不存在的变量。
看一下这个示例链接http://www.javapractices.com/topic/TopicAction.do?Id=215
发布于 2016-12-09 19:18:49
我想对于Wicket,最好在onInitialize()
中调用add
方法(参见components lifecycle):
public abstract class BasicPage extends WebPage {
public BasicPage() {
}
@Override
public void onInitialize() {
add(new Label("title", getTitle()));
}
protected abstract String getTitle();
}
https://stackoverflow.com/questions/3404301
复制相似问题