【发布时间】:2020-05-17 18:53:52
【问题描述】:
所以我有一个对象,我们称之为 myObject
这是我的对象的构造函数
private static class myObject {
public myObject(int argA) {
this.argA = argA;
}
public myObject(int argA, boolean argB) {
this.argA = argA;
this.argB = argB;
}
public myObject(int argA, int argC, int argD) {
this.argA = argA;
this.argC = argC;
this.argD = argD;
}
public myObject(int argA, String argE) {
this.argA = argA;
this.argE = argE;
}
public int argA = 1;
public boolean argB;
public int argC = 4;
public int argD = 5;
public String argE;
基本上我有默认值,并且构造函数会在需要时覆盖这些默认值。 当我调用这些构造函数时,这使得代码非常干净,我可以
myObject newObject = new myObject(4);
然而,一个 API 给了我一个参数列表来创建这个对象
List objectParams1 = Arrays.asList(1,3,4)
List objectParams2 = Arrays.asList(1,false)
List objectParams3 = Arrays.asList(1,"tomato")
myObject newObjectWithTheseParameters1 = ?;
myObject newObjectWithTheseParameters2 = ?;
myObject newObjectWithTheseParameters3 = ?;
使用参数列表创建此对象非常困难,因为它不知道要使用哪个构造函数。构建器方法是解决这个问题的方法吗?然而,这将使代码库变得更大,因为我必须调用这个构造函数〜 100 次..
myObject objectA = myObject.builder().withargA(4).withArgB(true).build();
【问题讨论】:
-
顺便说一句,Java 类名以大写变量 (
MyObject) 开头。否则会很混乱,尤其是在调用静态方法时 -
在这种情况下,我非常喜欢构建器方法。是的,它更长,但是当您不必记住哪种类型组合指的是哪种参数组合时,它会更容易阅读。
-
@LouisWasserman 我认为您在这里不需要建造师。只是一个工厂方法,用于测试列表的大小和类型(以区分 int boolean/int String 情况)。
-
我总是更喜欢可读性而不是其他任何问题。 Java 已经有很多样板代码。不确定添加更多有什么不同?您始终可以使用
lombok来最小化样板代码。@Builder是一个用于生成构建器的简单注解。 -
@PLfan666 我很困惑您如何能够从
List objectParams1获得对构建器的静态调用。你真的是说你得到了一个对象列表吗?如果是这样,为什么重构构造函数或使用构建器会有所帮助?
标签: java parameters constructor