Java 生成器模式的初始值设定项错误中出现异常
我有一个建设者。我在寻找一种方法来缩短几个不相似的声明,否则会占用大量的代码行,这就是我想到的一个例子。元素是一个单独的枚举集,其思想是循环遍历它,并将值添加到方法外部的Java 生成器模式的初始值设定项错误中出现异常,java,for-loop,map,enums,builder,Java,For Loop,Map,Enums,Builder,我有一个建设者。我在寻找一种方法来缩短几个不相似的声明,否则会占用大量的代码行,这就是我想到的一个例子。元素是一个单独的枚举集,其思想是循环遍历它,并将值添加到方法外部的HashMap乘法器中 它符合的很好,但是我得到了标题为乘数的运行时异常。put(e,1.0)。元素枚举肯定存在并且在同一文件中。一个名字相似的问题简单地回答“如果静态块中出现问题,就会发疯”。这似乎是抽象的,没有帮助。这里的映射只适用于生成器被分配到的类的实例,这就是为什么我将它包含在构造函数中。我错过了什么 这些都是希望有助
HashMap乘法器中
它符合的很好,但是我得到了标题为乘数的运行时异常。put(e,1.0)
。元素枚举肯定存在并且在同一文件中。一个名字相似的问题简单地回答“如果静态块中出现问题,就会发疯”。这似乎是抽象的,没有帮助。这里的映射只适用于生成器被分配到的类的实例,这就是为什么我将它包含在构造函数中。我错过了什么
这些都是希望有助于复制问题的示例:
public enum Element {
ALPHA("Alpha"),
BETA("Beta"),
GAMMA("Gamma"),
DELTA("Delta")
public final String name;
Element(String name) { this.name = name; }
}
类型类
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); }
}
}
您将获得乘法器.put(e,1.0)
的运行时异常,这是一个java.lang.NullPointerException
,因为您没有初始化乘法器
映射
如果没有初始化任何对象,默认情况下,它们使用null
值初始化
初始化它-
HashMap<Element, Double> multipliers =new HashMap<Element, Double>();
HashMap乘数=newhashmap();
能否打印堆栈跟踪?看起来有些变量未初始化。请检查您的代码以查看元素或乘数是否为空。如果您无法定位,请粘贴更多代码以查看如何初始化和调用生成器构造函数请提供一个。我们猜测你没有给我们的代码出了什么问题是没有意义的。我很感动,这是多么简单的一个错误,我一直在寻找所有错误的东西和无用的添加“修复”方法。非常感谢。
HashMap<Element, Double> multipliers =new HashMap<Element, Double>();