【发布时间】:2016-07-14 18:00:41
【问题描述】:
正如我们在子类的构造函数体中所知道的,父构造函数必须是第一个语句,否则我们会得到编译时错误,这个话题已经讨论过here。
假设调用父类构造函数会消耗大量系统资源,而子类构造函数需要先检查一些条件,如果条件满足很满意,我们可以通过父构造函数,否则不需要更进一步(假设抛出异常):
class parent {
parent(Object blah) {
//Heavy resource consuming tasks
}
}
class child extends parent {
child(Object blah, boolean condition) {
if (!condition) throw new IllegalArgumentException("Condition not satisfied");
super(blah); //Compile error!
}
}
如果有人遇到同样的问题,我很好奇是否有办法处理这种情况,或者我必须先调用父构造函数,不管它浪费了多少资源,然后抛出异常?
【问题讨论】:
-
不要将这种资源密集型逻辑放在构造函数中。制作一个轻量级构造函数和一个单独的
init()方法来完成繁重的工作。 -
@azurefrog 所以当我使用 init() 时,我仍然必须首先调用父构造函数
-
@CollinD,这不完全是重复的。它不问为什么。它只是要求一种解决此问题的方法,并且也是出于理智的原因。
-
@CollinD 如果您阅读我的帖子,我已经提到了您评论的链接!我在询问我可以处理这种情况的方法,而不是试图绕过它。
标签: java inheritance constructor