我有一个基本上像这样的课程:
class Child extends Parent {
public void reinitialize() {
super(); // illegal
}
}
基本上,我想再次调用构造函数来重新初始化。我无法将初始化代码重构为自己的方法,因为Parent
我无法修改其源代码。
有没有办法做到这一点?
我有一个基本上像这样的课程:
class Child extends Parent {
public void reinitialize() {
super(); // illegal
}
}
基本上,我想再次调用构造函数来重新初始化。我无法将初始化代码重构为自己的方法,因为Parent
我无法修改其源代码。
有没有办法做到这一点?
不,没有办法做到这一点。即使在 JVM 字节码级别,<init>
也可以在任何给定对象上最多调用一次方法链(构造函数)。
通常的答案是将代码重构为普通的实例方法,但正如您所说,这是不可能的。
您能做的最好的事情就是找到一种重新设计的方法来解决重新初始化的需要。或者,如果您需要父构造函数中的特定行为,您可以自己复制它。
解决此问题的唯一方法是
一种方法是提供一个静态方法,该方法返回一个新的 Child 对象。或者,您可以简单地在客户端代码中创建一个新的 Child 对象。无论哪种方式,听起来您将无法重用现有对象。
有几种方法可以实现这一点。其中之一是创建另一种方法,例如“init”。应该从构造函数或重新初始化方法调用此“init”方法。