在其他指令之后从构造函数调用另一个构造函数

时间:2015-05-09 13:11:43

标签: java constructor

我有2个构造函数,接受不同类型的参数:

public Board(String s) {

    // the string is parsed to an int array.
    int[] array = doSomething(s);

    this(array);
}

public Board(int[] array) {
    doSomethingElse(s);
}

然而,在第一个构造函数中,我得到了#34;构造函数调用必须是构造函数中的第一个语句"。有没有办法让构造函数在执行其他操作后调用另一个,或者它只是Java的限制?

3 个答案:

答案 0 :(得分:3)

不,在另一个构造函数中执行其他操作后,您无法调用构造函数。构造函数是Java中非常特殊的方法。但是你有两个选择:

1。如果在调用另一个构造函数之前要执行的所有操作都是预处理参数,则可以这样写:

public Board(String s) {
    this(doSomething(s));
}

private static int[] doSomething(String s) {...}

您可以调用任何静态方法并将其结果传递给另一个构造函数。

2。如果您的预处理意味着修改当前对象,那么您不能使用静态方法执行此操作,则可以调用特殊方法(如两个构造函数中的init()):

public Board(String s) {
    int[] array = doSomething(s);

    init(array);
}

public Board(int[] array) {
    init(array);
}

private void init(int[] array) {
    // do something else
}

答案 1 :(得分:2)

作为Java的规则,应首先调用this

public Board(String s) {
    this(doSomething(s));
}

答案 2 :(得分:1)

它不一定是构造函数。你可以这样做:

public Board(String s) {

    // the string is parsed to an int array.
    int[] array = doSomething(s);

    this.sharedMethod(array);
}

public Board(int[] array) {
    this.sharedMethod(array);
}

public void sharedMethod() {
 //yourLogic
}