列挙型は幾つかの状態をとるものを管理するためのものです。予約語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になります。