我有一个构建器构造函数。我正在寻找一种方法来缩短几个不相似的声明,否则这些声明会占用很多行代码,这就是我想出的一个例子。元素是一个单独的枚举集,其思路是遍历它并将值添加到方法外的HashMap<Element, Double> multipliers
。
它符合要求,但我得到了multipliers.put(e, 1.0)
的标题运行时异常。 Element枚举肯定存在并且在同一个文件中。一个类似名称的问题简单地回答&#34;如果在静态块中出现问题,那就会变得很疯狂。这似乎是抽象的,无益的。这里的映射仅适用于Builder分配给的类的实例,这就是我将它包含在构造函数中的原因。我错过了什么?
这些都是有希望帮助复制问题的例子:
public enum Element {
ALPHA("Alpha"),
BETA("Beta"),
GAMMA("Gamma"),
DELTA("Delta")
public final String name;
Element(String name) { this.name = name; }
}
Type类
import java.util.HashMap;
public class Type {
String name;
HashMap<Element, Double> multipliers;
Type(Builder p) {
name = p.name; multipliers = p.multipliers;
}
static class Builder {
final String name;
HashMap<Element, Double> multipliers;
public Builder(Element element) {
this.name = element.name;
// Default values
for (Element e : Element.values()) {
multipliers.put(e, 1.0);
}
}
public Builder nullify(Element... elements) {
for (Element e : elements) { multipliers.put(e, 0.0); }
return this;
}
public Type generate() { return new Type(this); }
}
}
并且在TypeChecker中,在main之外声明我有类似于:
的行static Type premier = new Type.Builder(Element.ALPHA)
.nullify(Element.GAMMA, Element.DELTA)
.generate();
答案 0 :(得分:1)
您获得multipliers.put(e, 1.0)
的{{1}}的运行时异常,因为您没有初始化java.lang.NullPointerException
地图。
如果您没有初始化任何对象,默认情况下它们会使用multipliers
值进行初始化。
初始化 -
null