列挙型は幾つかの状態をとるものを管理するためのものです。予約語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が自動的に補完されます。
列挙型は定数のように == 演算子で比較することができます。なお、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文で使用することができます。ただし、値が 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になります。