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