EnumMap 引发 NullPointerException

EnumMap raise NullPointerException

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

我将地图放入 class 以隐藏 "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 public 并直接调用该方法,它就可以工作。

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

任何人都可以向我解释一下这种行为吗?

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

the previous value associated with specified key, or null if there was no mapping for key. (A null return can also indicate that the map previously associated null with the specified key.)

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

假设您想要到return以前的值,只需将每个方法的return类型更改为Byte