EnumMap raise NullPointerException



我有一个Enum和一个EnumMap<Parameters, 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

有人能向我解释一下is的行为吗?

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

与指定键关联的上一个值,如果没有键的映射,则为null。(null返回也可以指示映射先前将null与指定密钥相关联。)

第一次为任何特定键调用set方法时,返回值将为null,但随后将其取消装箱为byte,这将引发您看到的异常。

假设希望返回上一个值,只需将每个方法的返回类型更改为Byte即可。

相关内容

  • 没有找到相关文章

最新更新