gpt4 book ai didi

java - 如何为不同类型的可变数量的参数编写 Java 构造函数?

转载 作者:搜寻专家 更新时间:2023-10-31 08:19:41 25 4
gpt4 key购买 nike

我必须为 Stamp 类编写一个构造函数。构造函数应该接受最多五个 String、int 和double 类型的参数。所以,构造函数看起来像这样:

public Stamp(String code, int year, String country, double value, int numberOfCopies){...}

问题是,在创建 Stamp 类的对象时,可能不会提供所有参数,即,一个对象可以声明为

Stamp stamp = new Stamp("some_code", 1991, "Burkina Faso", 50, 1000);

还有

Stamp stamp = new Stamp("some_code", 1991, "Burkina Faso");

并且构造函数必须在这两种情况下工作,即使参数列表被截断(在后一种情况下,一些默认值被分配给 valuenumberOfCopies ).当然,我可以只写六个构造函数(对于可能的参数个数从0到5,假设参数总是按照上面描述的顺序,不会混淆),但是应该有更聪明的方法。我知道我可以像这样声明构造函数

public Stamp(Object[] params){...}

然后将params的元素转换成相应的类。这可能会起作用,但我将始终必须使用“if”条件检查为构造函数提供了多少参数,以便在未提供相应参数的情况下决定是否为变量分配默认值,或者在提供的情况下使用提供的值给出。这一切看起来都很丑陋。因此,问题很简单:如果提供的参数列表长度不同且参数类型不同,构建构造函数(或其他方法)的方法是什么?

最佳答案

这可能是构建器模式的合适用途

public class Stamp {

public static class Builder {
// default values
private String code = "default code"
private int year = 1900;
// etc.

public Builder withCode(String code) {
this.code = code;
return this;
}
public Builder withYear(int year) {
this.year = year;
return this;
}
// etc.

public Stamp build() {
return new Stamp(code, year, country, value, numberOfCopies);
}
}

public Stamp(String code, int year, String country, double value,
int numberOfCopies){...}
}

那么构建过程就变成了

Stamp s = new Stamp.Builder()
.withCode("some_code")
.withYear(1991)
.build();

这样参数就不再依赖于顺序了——你可以等价地说

Stamp s = new Stamp.Builder()
.withYear(1991)
.withCode("some_code")
.build();

关于java - 如何为不同类型的可变数量的参数编写 Java 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573918/

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