Java 构造函数调用另一个构造函数
Java constructor calling another constructor
我是 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 编程的新手,但我遇到了这个问题,我想知道是否可以做到我想要的。
是的,这是规定。
如果您需要先做其他工作,您唯一真正的选择是将该工作重构为另一种方法。类似于:
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
的答案和其他一些组件 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
}
请注意,我已将辅助构造函数设为私有。这在 Bar
是私有内部 class 时特别有用,因此外部调用者无法创建并传入它。
我是 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 编程的新手,但我遇到了这个问题,我想知道是否可以做到我想要的。
是的,这是规定。
如果您需要先做其他工作,您唯一真正的选择是将该工作重构为另一种方法。类似于:
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
的答案和其他一些组件 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
}
请注意,我已将辅助构造函数设为私有。这在 Bar
是私有内部 class 时特别有用,因此外部调用者无法创建并传入它。