列挙型

みるくあいらんどっ! > ドキュメント > Java > じっくり学ぶ Java講座 [初心者向け・入門]


列挙型とは

列挙型は幾つかの状態をとるものを管理するためのものです。予約語enumを使用します。

列挙型はクラスやインターフェイスとはまた異なった扱いとなっています。

列挙型を使用したプログラム

四季(春夏秋冬)を列挙子で管理したプログラムを作成します。

ソースコードは以下の通り。

Y101/Season.java

/**
 * 季節を表す列挙型です。
 */
public enum Season {
	/**
	 * 春。
	 */
	SPRING,
	/**
	 * 夏。
	 */
	SUMMER,
	/**
	 * 秋。
	 */
	FALL,
	/**
	 * 冬。
	 */
	WINTER,
}

Y101/Y101.java

/**
 * 列挙型を使用します。
 */
public class Y101 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		Season season = Season.SPRING;
		
		System.out.println("季節は " + season + "です。");
	}
}

実行結果の例は以下の通り。

季節は SPRINGです。

列挙型についても、文字列連結の際には メソッド toStringが自動的に補完されます。

列挙型と if文

列挙型は定数のように == 演算子で比較することができます。なお、equalsメソッドを使用しても大丈夫です。

ソースコードは以下の通り。

Y102/Season.java

/**
 * 季節を表す列挙型です。
 */
public enum Season {
	/**
	 * 春。
	 */
	SPRING,
	/**
	 * 夏。
	 */
	SUMMER,
	/**
	 * 秋。
	 */
	FALL,
	/**
	 * 冬。
	 */
	WINTER,
}

Y102/Y102.java

/**
 * 列挙型を利用します。
 */
public class Y102 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		Season season1 = Season.SPRING;
		Season season2 = Season.WINTER;
		
		if(season1 == Season.SPRING) {
			System.out.println("季節 1は春です。");
		} else {
			System.out.println("季節 1は春ではありません。");
		}
		
		if(season2 == Season.SUMMER) {
			System.out.println("季節 2は夏です。");
		} else {
			System.out.println("季節 2は夏ではありません。");
		}
	}
}

実行結果の例は以下の通り。

季節 1は春です。
季節 2は夏ではありません。

列挙型と switch文

列挙型を switch文で使用することができます。ただし、値が nullの場合は、例外 NullPointerExceptionが発生することに注意してください。

ソースコードは以下の通り。

Y103/Season.java

/**
 * 季節を表す列挙型です。
 */
public enum Season {
	/**
	 * 春。
	 */
	SPRING,
	/**
	 * 夏。
	 */
	SUMMER,
	/**
	 * 秋。
	 */
	FALL,
	/**
	 * 冬。
	 */
	WINTER,
}

Y103/Y103.java

/**
 * 列挙型を利用します。
 */
public class Y103 {
	
	/**
	 * メインメソッド。
	 * @param args 引数
	 */
	public static void main(String[] args) {
		Season season1 = Season.SPRING;
		Season season2 = Season.WINTER;
		Season season3 = null;
		
		System.out.println("季節は" + Y103.getSeasonName(season1) + "です。");
		System.out.println("季節は" + Y103.getSeasonName(season2) + "です。");
		System.out.println("季節は" + Y103.getSeasonName(season3) + "です。");
	}
	
	/**
	 * 季節名を返します。
	 * @param season 季節
	 * @return 季節名
	 */
	private static String getSeasonName(Season season) {
		switch(season) {
		case SPRING:
			return "春";
		case SUMMER:
			return "夏";
		case FALL:
			return "秋";
		case WINTER:
			return "冬";
		default:
			return "異常値";
		}
	}
}

実行結果の例は以下の通り。

季節は春です。
季節は冬です。
Exception in thread "main" java.lang.NullPointerException
	at Y103.getSeasonName(Y103.java:26)
	at Y103.main(Y103.java:17)

17行目で nullを渡しているため、NullPointerExceptionが発生していることが分かります。

列挙型と文字列

列挙型から文字列への変換

列挙型から文字列への変換には、列挙型のインスタンスメソッド toStringを使用します。具体的には以下の通りです。

		Season season = Season.SPRING;
		String str = season.toString();

変数 strの参照先インスタンスは文字列"SPRING"になります。

文字列から列挙型への変換

文字列から列挙型の変換には、列挙型の staticなメソッド valueOfを使用します。具体的には以下の通りです。

		String str = "SPRING";
		Season season = Season.valueOf(str);

変数 seasonの値は列挙型の SPRINGになります。

最終更新: 2015/07/27 , 公開: 2013/03/13
▲top