環境
- Eclipse 2021-09 (4.21.0)
- Java 17 2021-09-14 LTS
Java にも Enum があるらしく、少し確認してみた。
Enum
簡単な Enum を定義すると下記の通り。
public enum Statuses { OK, NG; }
C# と変わらない。
が、こうなると大分変わる。
public enum Statuses { OK("正常終了のステータス。"), NG("何らかのエラーがあった場合のステータス。"); /** 説明。 */ private final String description; /** * コンストラクター。 * * @param description 説明。 */ private Statuses(String description) { this.description = description; } /** * 説明を返す。 * * @return description */ public String getDescription() { return description; } }
8.9.2. Enum Body Declarations を確認すると、コンストラクターやフィールドなどクラスと同様に定義できると書いてある。そのため、コンストラクターを用意して、
OK("正常終了のステータス。")
と、各 Enum 値に渡せると。(もうクラスでいいのでは。)
そして、下記のようなコードを用意して、コンソール出力してみる。
System.out.println(Statuses.OK + ":" + Statuses.OK.getDescription()); // 出力結果 // OK:正常終了のステータス。
定義した Enum Statuses.OK
と、 Enum に用意した説明(getDescription()
で取り出す)を出力している。
Enum 全て取り出したい時は、 values()
を使う。(8.9.3. Enum Members)
// values() を使って Enum の値を全て出力。 for (Statuses status : Statuses.values()) { System.out.println("status.name() : " + status.name() + ", status.ordinal() : " + status.ordinal() + ", status.getCode() : " + status.getDescription()); }
EnumSet
Delphi における 集合 、 C# における FlagsAttribute は、 Java では EnumSet を使えば良いようだ。
// ビットフラグには EnumSet を使用する。 EnumSet<Statuses> statusSets; // 定義した Enum を全て追加。 statusSets = EnumSet.allOf(Statuses.class); if (statusSets.contains(Statuses.OK)) { System.out.println("EnumSet.allOf(Statuses.class) : OKあり"); } else { System.out.println("EnumSet.allOf(Statuses.class) : OKなし"); } // 指定した Enum のみ追加。 statusSets = EnumSet.of(Statuses.NG); if (statusSets.contains(Statuses.OK)) { System.out.println("EnumSet.of(Statuses.NG) : OKあり"); } else { System.out.println("EnumSet.of(Statuses.NG) : OKなし"); } // AbstractCollection<E> を継承しているので、 add または remove が可能。 statusSets.add(Statuses.OK); if (statusSets.contains(Statuses.OK)) { System.out.println("statusSets.add(Statuses.OK) : OKあり"); } else { System.out.println("statusSets.add(Statuses.OK) : OKなし"); } // 出力結果 // EnumSet.allOf(Statuses.class) : OKあり // EnumSet.of(Statuses.NG) : OKなし // statusSets.add(Statuses.OK) : OKあり
上記サンプルコード : https://github.com/nakamurakko/JavaEnumStudy