25.
Enum
Enum(列挙型)とは
Enum(列挙型)は、複数の定数をひとつにまとめるデータ型です。Enumはクラスの1つでフィールドやメソッドを定義できるため、プログラムの可読性が向上するのがメリットです。
Enumの基本
Enumの定義
Enumで定義する定数のことを列挙子といいます。
アクセス修飾子 enum 列挙型名 {
列挙子1, 列挙子2, 列挙子3, ...;
};
Enumのアクセス
Enumは「列挙型名」と「列挙子」でアクセスします。
列挙型名. 列挙子1;
列挙型名. 列挙子2;
列挙型名. 列挙子3;
Enumの利用方法
Enumファイル作成
「ファイル > 列挙型」を選択します。

Enumファイルの設定
Enumの列挙型名「Size」を入力して【完了】をクリックします。
Enumファイルが作成されました。
public enum Size {
}
列挙子の定義
列挙子を「LARGE」「MEDIUM」「SMALL」を定義します。
public enum Size {
LARGE, MEDIUM, SMALL
}
Sizeプロパティ追加
「Drink」クラスに「Size」型のプロパティを定義します。
package cafe;
public class Drink {
public String name;
public Integer price;
//Size型のプロパティ
public Size size;
...
}
コンストラクタ追加
「Size」型を引数とするコンストラクタを追加します。
package cafe;
public class Drink {
...
public Drink(String name, Integer price) {
super();
this.name = name;
this.price = price;
}
//Size型を引数とするコンストラクタ
public Drink(String name, Integer price, Size size) {
super();
this.name = name;
this.price = price;
this.size = size;
}
}
メインアプリ
Drinkデータ生成
メインプログラム「App3」を作成し、「Drink」データを「Size」型つきで作成します。
package cafe;
public class App3 {
public static void main(String[] args) {
Drink drink1 = new Drink("コーヒー", 350, Size.SMALL);
Drink drink2 = new Drink("コーヒー", 400, Size.MEDIUM);
Drink drink3 = new Drink("コーヒー", 450, Size.LARGE);
}
}
Sizeの列挙名表示
「Drink」インスタンスの「size」プロパティをそれぞれ表示してみましょう。
public static void main(String[] args) {
Drink drink1 = new Drink("コーヒー", 350, Size.SMALL);
Drink drink2 = new Drink("コーヒー", 400, Size.MEDIUM);
Drink drink3 = new Drink("コーヒー", 450, Size.LARGE);
System.out.println(drink1.size);
System.out.println(drink2.size);
System.out.println(drink3.size);
}
結果
キーが表示されました。
SMALL
MEDIUM
LARGE
Enumの値取得
Enumの値定義
Enumでは列挙子とともに、文字列や数値の値を定義できます。
アクセス修飾子 enum 列挙型名 {
列挙子1(値1), 列挙子2(値2), 列挙子3(値3), ...;
};
Size型の値定義
「Size」型に「大」「中」「小」の文字列を定義します。
public enum Size {
LARGE("大"), MEDIUM("中"), SMALL("小");
}
Enumの修正
Enumの値を取得するには、プロパティとメソッド定義が必要です。
プロパティの追加
定数「value」を定義します。アクセス修飾子「private」とします。
public enum Size {
LARGE("大"), MEDIUM("中"), SMALL("小");
private final String value;
}
コンストラクタ追加
Enumのコンストラクタ「Size」を追加し、定数「value」の値を設定します。
public enum Size {
LARGE("大"), MEDIUM("中"), SMALL("小");
private final String value;
private Size(String value) {
this.value = value;
}
}
アクセサメソッド追加
値を取得するアクセサメソッド getValue() を追加し、定数「value」を取得します。
public enum Size {
LARGE("大"), MEDIUM("中"), SMALL("小");
private final String value;
private Size(String value) {
this.value = value;
}
public String getValue() {
return this.value;
}
}
Enumの値取得
メインメソッドから、Enumの値を取得します。
データのアクセス方法
データのアクセス方法は、通常のインスタンスのアクセスと同じです。
インスタンス.列挙型プロパティ.アクセサメソッド()
Enumの値表示
Enumの値を表示してみましょう。
public static void main(String[] args) {
Drink drink1 = new Drink("コーヒー", 350, Size.SMALL);
Drink drink2 = new Drink("コーヒー", 400, Size.MEDIUM);
Drink drink3 = new Drink("コーヒー", 450, Size.LARGE);
System.out.println(drink1.size.getValue());
System.out.println(drink2.size.getValue());
System.out.println(drink3.size.getValue());
}
結果
「Size」の値が表示されました。
小
中
大
演習
問題1
次の表を参考に「MagicType」Enumファイルを作成してみましょう。
列挙子 | 値 | データ型 |
---|---|---|
ATTACK | 攻撃 | String |
DEFENCE | 防御 | String |
HEAL | 回復 | String |
問題2
次の表を参考に、魔法クラス「Magic」を作成してみましょう。コンストラクタはそれぞれのプロパティを引数とします。
項目 | プロパティ | データ型 |
---|---|---|
タイプ | type | MagicType |
名称 | name | String |
効果値 | value | Integer |
問題3
「MagicList」クラスを作成して、コンストラクタにMap型の魔法リストデータを作成してみましょう。
name | value | MagicType |
---|---|---|
ファイヤー | 4 | ATTACK |
ブリザード | 5 | ATTACK |
プロテス | 3 | DEFENCE |
ヒール | 5 | HEAL |
問題4
作成した「Magic」「MagicList」クラスから、「Character」クラスに魔法攻撃メソッド magic() を実装してみましょう。
メソッド名 | 処理 |
---|---|
ATTACK | 相手に攻撃 |
DEFENCE | 相手の防御力を上げる |
HEAL | 相手のHPを回復する |
ヒント
インターフェイス「ICharacter」に magic() を定義しています。
package character;
import item.Item;
import monster.Monster;
public interface ICharacter {
....
public void magic(Character character, Magic magic);
public void magic(Monster monster, Magic magic);
...
}