gpt4 book ai didi

java - 构建器模式和无限参数

转载 作者:行者123 更新时间:2023-11-30 03:46:53 25 4
gpt4 key购买 nike

利用构建器模式,我注意到在某些情况下,使用传递无限参数的构建器方法一次更改多个值是理想的。

例如,假设我想做这样的事情:

public class Element {
String name;
Double fire, water, earth, air, dark, light;

Element(Builder e) {
name = e.name;
fire = e.fire; water = e.water; earth = e.earth;
air = e.air; dark = e.dark; light = e.light;
}

static class Builder {
String name;
// Default multipliers
Double fire = 1.0, water = 1.0, earth = 1.0, air = 1.0, dark = 1.0, light = 1.0;

Builder(String name){ this.name = name; }

public Builder setRes(Double... element) {
for (int i = 0; i < element.length; i++) { element[i] = 0.5; }
return this;
}
public Builder setVuln(Double... element) {
for (int i = 0; i < element.length; i++) { element[i] = 2.0; }
return this;
}
public Builder setImmune(Double... element) {
for (int i = 0; i < element.length; i++) { element[i] = 0.0; }
return this;
}

public Element create(){ return new Element(this); }
}
}

编译没有错误。这些类型只能保存确定的值 0、0.5、1 或 2。给定多个“元素”,我想到的是避免必须为每个“元素”创建 3 个方法,但问题是,一旦时间到来,我的问题就出现了实例化一个新元素——这将如何工作?是否有可能,或者我是否坚持使用多种方法?

我问的原因是我不知道如何传递尚未初始化的实例的值。

直觉会让我(错误地)这样做

Element nora = new Element.Builder("Nora").setVuln(nora.dark, nora.light).create();

最佳答案

我可能会更改模型,以使用 Enum 保存元素类型到乘数的映射,并在构建元素时,传递“阻力”、“的 Enum 字段”漏洞”和“免疫”类似如下:

public enum ElementType {

DARK,
LIGHT // ...
}

public class Element {
String name;
Map<ElementType, Double> multipliers = ...;

// ...

public Builder vulnerability(ElementType... elementTypes) {
for (ElementType elementType : elementTypes) {
multipliers.put(elementType , 2.0);
}
return this;
}
}


Element nora = new Element.Builder("Nora").vulnerability(ElementType.DARK, ElementType.LIGHT).create();

关于java - 构建器模式和无限参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25420848/

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