我有一个类,本质上是这样的:Java调用构造函数多次
class Child extends Parent {
public void reinitialize() {
super(); // illegal
}
}
基本上,我想再次调用构造函数重新初始化。我不能将初始化代码重构为自己的方法,因为Parent
是我无法修改源的库类。
有没有办法做到这一点?
我有一个类,本质上是这样的:Java调用构造函数多次
class Child extends Parent {
public void reinitialize() {
super(); // illegal
}
}
基本上,我想再次调用构造函数重新初始化。我不能将初始化代码重构为自己的方法,因为Parent
是我无法修改源的库类。
有没有办法做到这一点?
不,没有办法做到这一点。即使在JVM字节码级别,也可以在任何给定的对象上最多调用一次连续的方法(构造函数)。
通常的答案是将代码重构为普通的实例方法,但正如您所说,这是不可能的。
您可以做的最好的办法是找到一种重新设计的方法,以避开重新初始化的需要。或者,如果您需要在父构造函数中存在特定行为,则可以自己复制它。
执行此操作的一种方法是提供一个返回新的Child对象的静态方法。或者,您可以简单地在客户端代码中创建一个新的子对象。无论哪种方式,这听起来像你将无法重用现有的对象。
这个唯一的解决办法是要么
有几种方法可以实现这一点。其中之一是创建另一种方法,例如“init”。这个“init”方法应该从构造函数或者reinitialize方法中调用。
谢谢,但正如问题中提到的,我无法修改父类的构造函数。 – Xodarap
你想重新初始化父母或小孩吗? – PermGenError
创建一个'initialize()'方法,它执行你的构造函数当前所做的事情。然后,你的构造函数和'reinitialize()'都应该简单地调用'initialize()'。 – Vulcan
@Gan:孩子(所以我可以改为调用this()')。 Vulcan:如前所述,由于没有“Parent”来源,我无法重构。 – Xodarap