Javaの列挙型(Enum)について記載します。
目次
列挙型
列挙型は特定の値をまとめて管理したい場合などに使用します。
また、定義した値は定数として扱われます。( public static final )
1. 定義場所
クラス定義の中や、列挙型として単独のクラスとして定義することが出来ます。
クラス定義の中に定義する方法( Main.java )
1 2 3 4 5 6 7 |
enum Fruits { APPLE, ORANGE, BANANA } public class Main { } |
単独のクラスとして定義する方法( Fruits.java )
1 2 3 |
enum Fruits { APPLE, ORANGE, BANANA } |
2. 単純な列挙型
列挙型へのアクセスは、列挙型名.値 というようにします。
newによるインスタンス化は出来ません。
次の例では、Fruits という列挙型の中に、値(apple, orange, banana)を定義した例です。
Fruits.java
1 2 3 |
enum Fruits { APPLE, ORANGE, BANANA } |
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class Main { public static void main(String[] args) { // 列挙型名.値 でアクセス出来る Fruits fruits = Fruits.APPLE; // switch文の条件で使用出来る switch( fruits ) { case APPLE : System.out.println("Apple"); break; case ORANGE : System.out.println("Orange"); break; case BANANA : System.out.println("Banana"); break; } } } |
3. 複雑な列挙型
列挙型には、独自のコンストラクタ・メソッド・変数を定義することが出来ます。
次の例では、果物の名前、値段を管理します。
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
enum Fruits { APPLE("りんご", 100), ORANGE("オレンジ", 200), BANANA("バナナ", 300); private String name; private int price; Fruits( String name, int price ){ this.name = name; this.price = price; } public String getName() { return this.name; } public int getPrice() { return this.price; } } public class Main { public static void main(String[] args) { Fruits fruits = Fruits.APPLE; System.out.printf( "%s : %d", fruits.getName(), fruits.getPrice() ); // りんご : 100 } } |
4. 列挙型で実装されているメソッド
name()
値の名前を返します。
values()
全ての値を配列で返します。
valueOf( String name )
指定した名前を持つ値を返します。
ordinal()
宣言された位置を返します。
列挙型はComparableインタフェースを実装しているため、各値は定義した順番で管理されます。
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
enum Fruits { APPLE("りんご", 100), ORANGE("オレンジ", 200), BANANA("バナナ", 300); private String name; private int price; Fruits( String name, int price ){ this.name = name; this.price = price; } public String getName() { return this.name; } public int getPrice() { return this.price; } } public class Main { public static void main(String[] args) { // name() Fruits fruits = Fruits.ORANGE; System.out.println( fruits.name() ); // ORANGE // values() for( Fruits obj : Fruits.values() ) { System.out.printf( " %s : %d ", obj.getName(), obj.getPrice() ); } // りんご : 100 オレンジ : 200 バナナ : 300 // valueOf( 一致する値あり ) fruits = Fruits.valueOf("BANANA"); System.out.printf( " %s : %d ", fruits.getName(), fruits.getPrice() ); // バナナ : 300 // valueOf( 一致する値がない場合は、例外が発生 ) fruits = Fruits.valueOf("PEACH"); // java.lang.IllegalArgumentException // ordinal() fruits = Fruits.ORANGE; System.out.println( fruits.ordinal() ); // 1 } } |