我是Java新手,我试图在其他构造函数中调用构造函数。这是我的代码:
class TestContructor {
public TestContructor(){
String params = "1, 2, 3";
this(params);
}
public TestContructor(String params){
System.out.println("TestContructor with params: " + params);
}
}
class TestRunner {
public static void main(String[] args) {
new TestContructor();
}
}
然后我收到了这个错误:
javac -g Test.java
Test.java:5: error: call to this must be first statement in constructor
this(params);
^
1 error
好吧,我更改了TestConstructor代码:
class TestContructor {
public TestContructor(){
// String params = "1, 2, 3";
this("1, 2, 3"); //Now is the first statement
}
public TestContructor(String params){
System.out.println("TestContructor with params: " + params);
}
}
好的,没问题。
那么,在java中调用另一个构造函数是否必须在第一个语句行中声明它?
如果我在调用其他构造函数之前需要执行某种处理呢?
我记得我在java编程方面比较新,但我遇到了这个问题,我想知道是否可以这样做。
答案 0 :(得分:1)
是的,这是一条规则。
如果您需要先做其他工作,那么您唯一真正的选择就是将该工作重构为另一种方法。类似的东西:
public TestConstructor(String params) {
// whatever
}
public TestConstructor(String... paramParts) {
this(combineParts(paramParts));
}
private static String combineParts(String[] parts) {
StringBuilder sb = new StringBuilder();
for (String part : parts) {
sb.append(part);
}
return sb.toString();
}
如果您有各种相互依赖的计算(例如,您需要调用this(foo, bar)
,其中bar
取决于foo
和其他组件{{1}的答案}),然后你可以链接构造函数更多。类似的东西:
baz
请注意,我已将辅助构造函数设为私有。如果public TestConstructor(FooComponent1 f1, FooComponent2 f2, Baz baz) {
this(createFoo(f1, f2), baz);
}
private TestConstructor(Foo foo, Baz bar) {
this(foo, createBar(baz));
}
private TestConstructor(Foo foo, Bar bar) {
// do whatever
}
是私有内部类,则此功能特别有用,因此外部调用者无法创建一个并将其传入。