我有一个枚举和一个EnumMap<Parameters, Byte>
。
我将地图放入一个类中以隐藏“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
有人可以向我解释我的行为吗?
答案 0 :(得分:8)
问题在于您使用put
的返回值的方式,其记录为:
与指定键关联的先前值,如果没有键映射,则返回null。 (null返回也可以指示映射先前与指定键关联的null。)
当您第一次为任何特定键调用set
方法时,返回值将为null
- 但您要将其拆箱到byte
,这将抛出你看到的例外。
假设您想要返回之前的值,只需将每种方法的返回类型更改为Byte
。