Java Enum完全ガイド:列挙型とEnumクラスの活用法
Java Enum
このチュートリアルでは、Javaのenumについて学びます。例を用いてenumとenumクラスの作成と使用方法を学びます。
Javaにおいて、enum(enumerationの略)は固定された定数値のセットを持つ型です。enumキーワードで宣言します。例えば、
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
ここでは、Sizeというenumを作成しました。これには固定値SMALL、MEDIUM、LARGE、EXTRALARGEが含まれます。
波括弧内のこれらの値はenum定数(値)と呼ばれます。
注意: enum定数は通常大文字で表記されます。
例1:Java Enum
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } class Main { public static void main(String[] args) { System.out.println(Size.SMALL); System.out.println(Size.MEDIUM); } }
出力**
SMALL MEDIUM
上記例からわかるように、enum名を使って定数値にアクセスします。
また、enum型の変数を作成できます。例えば、
Size pizzaSize;
ここでは、pizzaSizeはSize型の変数です。4つの値のみ代入可能です。
pizzaSize = Size.SMALL; pizzaSize = Size.MEDIUM; pizzaSize = Size.LARGE; pizzaSize = Size.EXTRALARGE;
例2:switch文でのJava Enum
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } class Test { Size pizzaSize; public Test(Size pizzaSize) { this.pizzaSize = pizzaSize; } public void orderPizza() { switch(pizzaSize) { case SMALL: System.out.println("I ordered a small size pizza."); break; case MEDIUM: System.out.println("I ordered a medium size pizza."); break; default: System.out.println("I don't know which one to order."); break; } } } class Main { public static void main(String[] args) { Test t1 = new Test(Size.MEDIUM); t1.orderPizza(); } }
出力**
I ordered a medium size pizza.
上記プログラムでは、enum型Sizeを作成し、Size型の変数pizzaSizeを宣言しました。
ここでは、変数pizzaSizeは4つの値(SMALL、MEDIUM、LARGE、EXTRALARGE)のみ代入可能です。
以下の文に注目:
Test t1 = new Test(Size.MEDIUM);
これはTestクラス内のTest()コンストラクタを呼び出します。変数pizzaSizeにMEDIUM定数が代入されます。
値に基づいて、switch文の該当ケースが実行されます。
JavaのEnumクラス
Javaでは、enum型は特別な種類のクラスと見なされます。Java 5で導入されました。
Enumクラスには、通常のクラスと同様にメソッドとフィールドを含められます。
enum Size { constant1, constant2, …, constantN; // メソッドとフィールド }
enumクラスを作成すると、コンパイラは各enum定数のインスタンス(オブジェクト)を作成します。また、すべてのenum定数はデフォルトでpublic static finalです。
例3:Java Enumクラス
enum Size{ SMALL, MEDIUM, LARGE, EXTRALARGE; public String getSize() { // thisはSMALLオブジェクトを参照 switch(this) { case SMALL: return "small"; case MEDIUM: return "medium"; case LARGE: return "large"; case EXTRALARGE: return "extra large"; default: return null; } } public static void main(String[] args) { // getSize()を呼び出し // SMALLオブジェクトを使用 System.out.println("The size of the pizza is " + Size.SMALL.getSize()); } }
出力**
The size of the pizza is small
上記例では、enumクラスSizeを作成しました。4つの定数SMALL、MEDIUM、LARGE、EXTRALARGEを持ちます。
Sizeがenumクラスであるため、コンパイラは各enum定数のインスタンスを自動作成します。
main()メソッド内で、インスタンスSMALLを使ってgetSize()メソッドを呼び出しています。
注意: 通常のクラスと同様に、enumクラスもコンストラクタを含められます。詳細はJava enum constructorを参照。
Java Enumクラスのメソッド
enumクラスにはすぐに使える定義済みメソッドがあります。
1. Java Enum ordinal()
ordinal()メソッドはenum定数の位置を返します。例えば、
ordinal(SMALL) // returns 0
2. Enum compareTo()
compareTo()メソッドは序数値に基づいてenum定数を比較します。例えば、
Size.SMALL.compareTo(Size.MEDIUM) // returns ordinal(SMALL) - ordinal(MEDIUM)
3. Enum toString()
toString()メソッドはenum定数の文字列表現を返します。例えば、
SMALL.toString() // returns "SMALL"
4. Enum name()
name()メソッドはenum定数の定義名を文字列で返します。name()から返される値はfinalです。例えば、
name(SMALL) // returns "SMALL"
5. Java Enum valueOf()
valueOf()メソッドは文字列を受け取り、同じ文字列名を持つenum定数を返します。例えば、
Size.valueOf("SMALL") // returns constant SMALL.
6. Enum values()
values()メソッドは、すべてのenum定数を含むenum型の配列を返します。例えば、
Size[] enumArray = Size.value();
なぜJava Enumなのか?
Javaでenumが導入されたのは、int定数の使用を置き換えるためです。
int定数のコレクションを使用していたとします。
class Size { public final static int SMALL = 1; public final static int MEDIUM = 2; public final static int LARGE = 3; public final static int EXTRALARGE = 4; }
ここで、定数を出力すると問題が生じます。数値のみが出力され、役に立たない可能性があるためです。
代わりにenumを使えばシンプルです。例えば、
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
これによりコードがより直感的になります。
また、enumはコンパイル時型安全性を提供します。
Size型の変数を宣言すると、例えば、
Size size;
ここでは、変数が4つの値のいずれかを保持することが保証されます。それ以外の値を渡そうとするとコンパイラがエラーを出します。
Java
- C言語 列挙型(Enum)マスター: 定義・宣言・フラグ操作
- Java演算子をマスター:種類、構文、実践例
- Javaコメント:種類、使い方、ベストプラクティス
- Java拡張forループをマスター:構文、例、ベストプラクティス
- Java文字列をマスター:生成、メソッド、ベストプラクティス
- Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
- Java無名インナークラス完全ガイド:定義、構文、実践例
- Java Enum完全ガイド:列挙型とEnumクラスの活用法
- Java Enumコンストラクタ徹底解説:実践例で理解する
- Java Enumの文字列表現マスター:デフォルト、オーバーライド、高度なパターン
- Javaのtry-with-resourcesをマスターする:自動リソース管理の仕組みと活用法