2

我有一个 Enum 和一个EnumMap<Parameters, Byte>.

我将地图放入一个类中以隐藏“字节”值。所以我有一个set(Parameter, int)andset(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

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

4

1 回答 1

8

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

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

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

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

于 2015-02-25T13:05:19.473 回答