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 は which ポイントを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 に答える