Java Call构造函数多次

时间:2012-12-09 20:06:27

标签: java

我有一个类似于:

的课程
class Child extends Parent {
  public void reinitialize() {
    super();  // illegal
  }
}

基本上,我想再次调用构造函数来重新初始化。我无法将初始化代码重构为自己的方法,因为Parent是一个我无法修改源代码的库类。

有办法做到这一点吗?

4 个答案:

答案 0 :(得分:7)

不,没有办法做到这一点。即使在JVM字节码级别,也可以在任何给定对象上最多调用一次<init>方法(构造函数)。

通常的答案是将代码重构为普通的实例方法,但正如您所说,这是不可能的。

您可以做的最好的事情就是找到一种重新设计方法,以满足重新初始化的需要。或者,如果您需要的父构造函数中存在特定行为,您可以自己复制它。

答案 1 :(得分:3)

唯一的解决方法是

  • 每次需要“重新初始化”时都会创建一个新对象。
  • 使用委托而不是继承,即使您必须同时使用它们。通过使用委托,您可以替换实例。
  • 创建一个重新初始化方法,它与父构造函数完全相同。例如如果必须,可以使用反射替换字段或清除集合。

答案 2 :(得分:1)

执行此操作的一种方法是提供一个返回新Child对象的静态方法。或者,您只需在客户端代码中创建一个新的Child对象即可。无论哪种方式,听起来你都无法重用现有的对象。

答案 3 :(得分:0)

有几种方法可以实现这一目标。其中之一是创建另一种方法,例如“init”。应该从构造函数或reinitialize方法调用此“init”方法。