gpt4 book ai didi

java - 使用可变参数传递参数对而不会遇到错误的模式

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:07:26 26 4
gpt4 key购买 nike

本来我们有一个对象,构造如下:

FieldSet set = new FieldsSet(
new Field("stringField", "aaa"),
new Field("booleanField", Boolean.FALSE),
new Field("intValue", new Integer(123));

但是每次构造 Field 对象似乎很乏味(在这个例子中我给了 3 个字段,但通常它更像是 20 个)。所以我们添加了如下方法:

public static FieldSet getNewInstance(Object... fieldPairs) {

ArrayList<Field> fields = new ArrayList<Field>();

for (int i = 0; i < fieldPairs.length; i += 2) {
fields.add(new Field(fieldPairs[i].toString(), fieldPairs[i + 1]));
}

return new FieldSet(fields.toArray(new Field[fields.size()]));
}

我们可以这样使用:

FieldSet set = FieldSet.getNewInstance(
"stringField", "aaa",
"booleanField", Boolean.FALSE,
"intValue", new Integer(123));

如您所见,它采用了一种错误的模式,即使用参数放置来传达两种类型的参数。

所以我试图找到一个更好的模式

  • 允许用户以相当简洁的形式构建FieldSet,即避免多次繁琐地创建Field对象
  • 避免不良模式,例如上面的模式

下面是 FieldSet 和 Field 的相关部分:

public class FieldSet { 
ArrayList<Field> fields = new ArrayList<Field>();

public FieldSet(Field... fields) {
for(Field field : fields) {
this.fields.add(field);
}
}
}

public class Field {
private String name;
private Object value;

public Field(String name, Object value) {
this.name = name;
this.value = value;
}
}

注意:我在这里提供的代码是专门为以最简单的形式演示问题而创建的,因此请不要注意其他一些低效的地方(例如在数组和ArrayList之间来回转换-该问题不是真实代码的一部分)

谢谢!

最佳答案

原来的路才是正路。任何其他方式都会丢失编译器类型检查,或者使用起来更麻烦。

虽然 builder可能是一个选择:

FieldSet set = FieldSet.builder()
.add("stringField", "aaa")
.add("booleanField", Boolean.FALSE)
.add("intValue", new Integer(123))
.build();

关于java - 使用可变参数传递参数对而不会遇到错误的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241174/

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