1. ホーム
  2. java

[解決済み] enumのordinalを使用するのは良い習慣ですか?

2022-03-04 13:36:19

質問

enumがあります。

public enum Persons {

    CHILD,
    PARENT,
    GRANDPARENT;

}

を使用することに問題はないのでしょうか? ordinal() メソッドを使用して、enum メンバ間の階層をチェックできますか?つまり、冗長性を除いて、将来誰かが偶然に順序を変更することができる場合に、それを使用することの不利な点はありますか。

それとも、そのようなことをするのが良いのでしょうか。

public enum Persons {

    CHILD(0),
    PARENT(1),
    GRANDPARENT(2);

    private Integer hierarchy;

    private Persons(final Integer hierarchy) {
        this.hierarchy = hierarchy;
    }

    public Integer getHierarchy() {
        return hierarchy;
    }

}

解決方法は?

TLDR:ダメです。

のjavadocを参照してください。 ordinal メソッドを Enum.java :

ほとんどのプログラマーは、このメソッドを使うことはないでしょう。 このメソッドは のような洗練された列挙型のデータ構造で使用するために設計されています。 として java.util.EnumSetjava.util.EnumMap .

まず - マニュアル(この場合はjavadoc)を読んでください。

第二に、もろいコードを書かないことです。enumの値は将来変更される可能性があり、あなたの2番目のコード例の方がよっぽど クリア そして 保守性 .

の間に新しい列挙型の値が挿入された場合、将来的に問題が発生することは間違いなく避けなければなりません。 PARENTGRANDPARENT .