English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、Javaのエnumを学びます。例を通じてエnumとエnumクラスの作成と使用を学びます。
Javaでは、エnumは固定の可能値セットを持つタイプです。enumキーワードを使用してエnumを宣言します。例えば、
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
ここでは、Sizeという名前のエnumを作成しました。
括弧内の値はエnum値(定数)と呼ばれます。これらはエnumタイプが保持できるユニークな値です。
注意:エnum定数は通常大文字で表されます。
簡単な例を紹介しましょう。
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
上記の例から分かりますように、私たちはエnum名を使用して定数値にアクセスします。
同様に、列挙型の変数を生成することもできます。例えば、}}
Size pizzaSize;
ここでは、pizzaSizeはSize型の変数です。以下の4の値。
pizzaSize = Size.SMALL; pizzaSize = Size.MEDIUM; pizzaSize = Size.LARGE; pizzaSize = Size.EXTRALARGE;
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("私は小さいピザを注文しました。"); break; case MEDIUM: System.out.println("私は中号のピザを注文しました。"); break; default: System.out.println("私はどれを選ぶべきか分かりません。"); break; } } } class Main { public static void main(String[] args) { Test t1 = new Test(Size.MEDIUM); t1.orderPizza(); } }
出力結果
私は中号のピザを注文しました。
上記のプログラムでは、列挙型Sizeを生成し、Size型の変数pizzaSizeを宣言しました。
変数pizzaSizeは、以下の4の値(SMALL、MEDIUM、LARGE、EXTRALARGE)。
変数pizzaSizeにMEDIUM定数が割り当てられます。これに基づいて、switch case文の1つのケースを印刷します。
Javaでは、列挙型はクラスの特殊なタイプとされています。それはJava 5リリース版で導入されました。
列挙型クラスは通常のクラスと同様にメソッドとフィールドを含むことができます。
enum Size { constant;1, constant;2, …, constantN; //メソッドとフィールド }
列挙型定数は常にデフォルトでpublic static finalとされます。
enumクラスを生成するとき、コンパイラは各enum定数のインスタンス(オブジェクト)も生成します。
enum Size{ SMALL, MEDIUM, LARGE, EXTRALARGE; public String getSize() { //これはオブジェクト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) { //オブジェクトSMALLを使用してgetSize()メソッドを呼び出します System.out.println("ピザのサイズは「" + Size.SMALL.getSize()); } }
出力結果
ピザのサイズはsmallです
上記の例では、エンümクラス Sizeを作成しました。このクラスにはSMALL、MEDIUM、LARGE、EXTRALARGEの4つの常量があります。
Sizeはエンümクラスであるため、コンパイラは各エンüm常量にインスタンスを自動的に作成します。
main()メソッド内で、インスタンスSMALLを使用してgetSize()メソッドを呼び出しました。
通常のクラスと同様に、エンümクラスもコンストラクタを含むことができます。詳細については、Java 枚举のコンストラクタ。
エンümクラスにはいつでも使用できるいくつかのプリedefインメソッドがあります。
ordinal()メソッドはエンüm常量の位置を返します。例えば、
ordinal(SMALL) //0を返します
compareTo()メソッドは序数値に基づいてエンüm常量を比較します。例えば、
Size.SMALL.compareTo(Size.MEDIUM) //ordinal(SMALL)を返します - ordinal(MEDIUM)
toString()メソッドはエンüm常量の文字列表現を返します。例えば、
SMALL.toString() //「SMALL」を返します
name()メソッドはエンüm常量の定義名を文字列形式で返します。name()メソッドが返す値はfinalです。例えば、
name(SMALL) //「SMALL」を返します
valueOf()メソッドは文字列を受け取り、同じ文字列名のエンüm常量を返します。例えば、
Size.valueOf("SMALL") //常量 SMALLを返します
values()メソッドは、すべてのエンüm常量を含むエンümタイプの配列を返します。例えば、
Size[] enumArray = Size.value();
Javaでは、int定数の使用を代わりにenumを導入しました。
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; }
ここで、定数を印刷すると、問題が発生します。これは、数字だけを印刷するため、助けにはなりません。
したがって、int定数を使用する代わりにエnumを使用することができます。例えば、
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
これにより、私たちのコードがより直感的になります。
同様に、エnumはコンパイル時のタイプの安全性を提供します。
Size タイプの変数(例えば、上記の例のように)を宣言すると、その変数が4つの値のうちの1つを収容する確実性が得られます。4つの値以外の値を渡そうとすると、コンパイラがエラーを投げ出します。