gpt4 book ai didi

java - 有条件包含元素的生成器

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:23:06 24 4
gpt4 key购买 nike

我一直在想是否可以更优雅地使用可选参数来构建 Builder:

我有什么:带有名称、ID、年龄的对象。

我有一个包含年龄的复杂条件,我想在该条件成功时将其发送给构建器,但我想让它成为一个带有一个参数的优雅的衬里。

我目前拥有的:

 Builder.name("name").id("id").age(age, complexCondition).build();

 Builder builder = Builder.name("name").id("id");
if(complexCondition){
builder.age(age);
}

还有更好的选择吗?我想在没有过度工程构建器的情况下解决我所拥有的条件,也没有为每个复杂的条件检查过度编码。

更新:我正在寻找的解决方案没有:

a) 将 complexChecks 或 boolean 值传递给构建器——根据定义,他的工作不是检查

b) 在调用构建器的方法内部,每个条件检查不添加 3 行

最佳答案

我的回答是保持简单。构建器的职责是构建一个对象。不提供复杂的 DSL 来评估条件。所以你的第二个片段非常好。

为了避免代码过载,许多 if 检查与对构建器的调用交织在一起,您需要做的就是将这些检查的代码提取到方法中。所以你可以从

Builder builder = Builder.name("name").id("id");
if (complexCondition) {
builder.age(age);
}

Integer age = null; // or whatever other default value you want
if (complexCondition) {
age = somethingElse;
}
Builder builder = Builder.name("name").id("id").age(age);

最后,将前 4 行提取到计算并返回年龄的方法中,以

Builder builder = Builder.name("name").id("id").age(computeAge());

我个人更喜欢它按以下方式缩进,在我看来,这样可以使其更具可读性和更易于调试:

Builder builder = Builder.name("name")
.id("id")
.age(computeAge());

关于java - 有条件包含元素的生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48368512/

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