EnumMap引发NullPointerException

Mar*_*hke 2 java nullpointerexception enum-map

我有一个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我打电话给任何一种方法时,NPW会提出哪一点put!如果我parameters公开并且直接调用方法它就可以了.

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

任何人都可以向我解释这是对我的行为吗?

Jon*_*eet 8

问题是你使用返回值的方式put,记录为:

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

第一次set为任何特定键调用方法时,返回值将是null- 但是您将其拆箱byte,这将抛出您所看到的异常.

假设您返回先前的值,只需将返回类型更改Byte为每个方法.