EnumMap引发NullPointerException

时间:2015-02-25 13:01:50

标签: java nullpointerexception enum-map

我有一个枚举和一个EnumMap<Parameters, Byte>

我将地图放入一个类中以隐藏“byte”值。我有一个set(Parameter, int)set(Parameter, boolean)方法。

public enum Parameter {
    BLAH
}


public class Parameters {
    private final Map<Parameter, Byte> parameters = new EnumMap<>(Parameter.class);

    public byte set(Parameter parameter, boolean set) {
        return this.parameters.put(parameter, (byte) (set ? 0x01 : 0x00));
    }

    public byte set(Parameter parameter, int value) {
        return this.parameters.put(parameter, (byte) value);
    }
}

当我调用我的任何方法时,NPW会将哪个点提升到put!如果我将parameters公开并且直接调用该方法就可以了。

final Parameters parameters = new Parameters();
//parameters.parameters.put(Parameter.BLAH, (byte) 0x00);
parameters.set(Parameter.BLAH, false); // NPE

有人可以向我解释我的行为吗?

1 个答案:

答案 0 :(得分:8)

问题在于您使用put的返回值的方式,其记录为:

  

与指定键关联的先前值,如果没有键映射,则返回null。 (null返回也可以指示映射先前与指定键关联的null。)

当您第一次为任何特定键调用set方法时,返回值将为null - 但您要将其拆箱到byte,这将抛出你看到的例外。

假设您想要返回之前的值,只需将每种方法的返回类型更改为Byte