gpt4 book ai didi

Java 构造函数调用另一个构造函数

转载 作者:行者123 更新时间:2023-12-01 11:37:21 26 4
gpt4 key购买 nike

我是 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
}

请注意,我已将辅助构造函数设为私有(private)。如果 Bar 是私有(private)内部类,则这特别有用,因此外部调用者无法创建一个并将其传入。

关于Java 构造函数调用另一个构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29835638/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com