java – 是否可以在构造函数中的super()之前执行计算?

假设我有一个类Base有一个单一的参数构造函数与一个TextBox对象作为它的参数。如果我有一个简单的以下形式的类:

public class Simple extends Base {
  public Simple(){
    TextBox t = new TextBox();
    super(t);
    //wouldn't it be nice if I could do things with t down here?
  }
}

我会得到一个错误告诉我调用super必须是构造函数中的第一个调用。但是,奇怪的是,我可以做到这一点。

public class Simple extends Base {
  public Simple(){
    super(new TextBox());
  }
}

为什么这是被允许的,但第一个例子不是?我可以理解需要先设置子类,也许不允许在调用超级构造函数之前实例化对象变量。但是t显然是一个方法(局部)变量,那么为什么不允许呢?

有办法解决这个限制吗?有没有一个好的和安全的方法来保存变量的事情,你可能构造BEFORE调用超级,但后你进入构造函数?或者,更一般地,允许计算在超级实际调用之前完成,但在构造函数内?

谢谢。

是的,有一个解决方法为您的简单的情况。您可以创建一个私有构造函数,它将TextBox作为参数,并从您的公共构造函数中调用它。

public class Simple extends Base {
    private Simple(TextBox t) {
        super(t);
        // continue doing stuff with t here
    }

    public Simple() {
        this(new TextBox());
    }
}

对于更复杂的东西,你需要使用工厂或静态工厂方法。

http://stackoverflow.com/questions/2303604/is-it-possible-to-do-computation-before-super-in-the-constructor

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – 是否可以在构造函数中的super()之前执行计算?