こんにちは、まさきです。
今回はJavaの列挙型と言われるEnumについて説明していきます。
Enumクラスとは
Enumとは別名『列挙型』と言い、オブジェクトをいくつかまとめたクラス扱うことができます。
例えば、FruitクラスとしてApple、Orange、Grapeという変数を列挙できます。
列挙型を使うことで定数として扱う変数をクラスとしてさらにまとめられたり、その中で共通の処理を実装することができます。
これにより、例えばユーザーの好きな果物を選択するセレクトボックスがあったとすると、その選択肢はFruitクラスから取得するような作りにすることで保守性を高めたり、新しい値を追加するときもFruitクラスに追加するなどメンテナンスしやすくなります。
Enumの実装方法
最低限の実装では以下のように記載します。
public enum Fruit {
APPLE,ORANGE,GRAPE
}
まずenumを指定し、クラス名を記載します。
その後列挙したいオブジェクトをカンマで区切って記載します。
呼び出す場合はこのようにクラス名.列挙名とします。
public class Main {
public static void main(String[] args) {
System.out.print(Fruit.ORANGE);
}
}
列挙型のメソッド
列挙型に用意されているメソッドもあります。
これらは列挙型を定義すると使えるようになります。
メソッド名 | 説明 |
---|---|
String toString() | enum定数名の文字列を返す。 |
boolean equals(Object obj) | 指定されたオブジェクトがこのenum定数と同じ場合はtrueを返す。 |
int hashCode() | enum定数のハッシュコードを返す。 |
String name() | enum定数名の文字列を返す。 |
int ordinal() | 列挙宣言の順番を返す。 |
気づいた方もいるかと思いますが、上の3つはObjectクラスと同じですよね!
toStringとequalsとhashCodeメソッドはオーバーライドが可能です。
またEnumクラスで使えるメソッドはこちらです。
メソッド名 | 説明 |
---|---|
static 列挙型[] values() | 列挙した定数の全てを配列で返す。 |
static 列挙型 valueOf(String name) | 引数で指定した名前をもつ値を返す。 |
Fruitクラスを例にすると以下のような結果になります。
public class Main {
public static void main(String[] args) {
System.out.println(Fruit.ORANGE.toString()); //ORANGE
System.out.println(Fruit.ORANGE.equals("ORANGE")); //false
System.out.println(Fruit.ORANGE.hashCode()); //460141958
System.out.println(Fruit.ORANGE.name()); //ORANGE
System.out.println(Fruit.ORANGE.ordinal()); //1
System.out.println(Fruit.values()); //[LFruit;@4554617c
System.out.println(Fruit.valueOf("ORANGE")); //ORANGE
}
}