我有一个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
即可。