Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成器模式的初始值设定项错误中出现异常_Java_For Loop_Map_Enums_Builder - Fatal编程技术网

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>();