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);
	...
}