7

私はこのような列挙型を持っています

public enum Sizes {
    Normal(232), Large(455);

    private final int _value;

    Sizes(int value) {
        _value = value;
    }

    public int Value() {
        return _value;
    }
}

これで、Sizes.Normal.Value()を呼び出して整数値を取得できますが、整数値を列挙型に戻すにはどうすればよいですか?

私が今していることは:

public Sizes ToSize(int value) {
    for (Sizes size : Sizes.values()) {
        if (size.Value() == value)
            return size;
    }
    return null;
}

しかし、それがそれを行う唯一の方法ですか?それがJavaの仕組みですか?

4

2 に答える 2

8

はい、一般的に列挙型に静的メソッドを追加することによって、それが行われます。考えてみてください。列挙型に 10 個のフィールドを持つことができます。Java がそれらすべてのルックアップを設定すると思いますか?

ここでのポイントは、Java 列挙型には「値」がないということです。ID と序数に加えて、自分で追加するものがあります。これは、代わりに任意の整数値を持つという点で C++ に従う C# とはまったく異なります。

于 2012-05-19T02:20:53.180 に答える
1

最後に Java を使用してからしばらく経ちましたが、私の記憶が正しければ、_valueフィールドと列挙型の序数の間には何の関係もありません。_value知る限り、たとえば、同じ を持つ 2 つのエントリを持つことができます。@bmargulies が指摘したように、enum には多くのフィールドを含めることができ、それらのそれぞれ (またはすべて) に個別の値を使用することを制限するものは何もありません。

この関連する質問も参照してください。どうやら、エントリの序数を直接設定することはできません。

于 2012-05-19T02:23:23.667 に答える