Javaの列挙型について(2)
前回に引き続き列挙型。
今回は月を表す列挙型と,その使用例。
Month.java
package com.rmstar.enumsample; public enum Month { JANUARY, FEBRUARY, MARCH, APRIL, MAY, JUNE, JULY, AUGUST, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER, ; }
Main.java
package com.rmstar.enumsample; public class Main { private static void showInOldJapanese(Month month) { switch (month) { case JANUARY: System.out.println("睦月"); break; case FEBRUARY: System.out.println("如月"); break; case MARCH: System.out.println("弥生"); break; case APRIL: System.out.println("卯月"); break; case MAY: System.out.println("皐月"); break; case JUNE: System.out.println("水無月"); break; case JULY: System.out.println("文月"); break; case AUGUST: System.out.println("葉月"); break; case SEPTEMBER: System.out.println("長月"); break; case OCTOBER: System.out.println("神無月"); break; case NOVEMBER: System.out.println("霜月"); break; case DECEMBER: System.out.println("師走"); break; } } private static void showSeason(Month month) { switch (month) { case MARCH: case APRIL: case MAY: System.out.println("春"); break; case JUNE: case JULY: case AUGUST: System.out.println("夏"); break; case SEPTEMBER: case OCTOBER: case NOVEMBER: System.out.println("秋"); break; case DECEMBER: case JANUARY: case FEBRUARY: System.out.println("冬"); break; } } public static void main(String[] args) { showInOldJapanese(Month.JULY); showSeason(Month.JULY); } }
長い!
switch文...
これにもしかしたら,
1月と表示するメソッドとかDECとか表示するメソッドが加わるかもしれない。
良くない。
文月や夏といったものはJULYに紐づくものだから,
JULYインスタンスのフィールドに持たせて,ゲッタでアクセスするよう変更した。
変更後は以下の通り。
Month.java(変更後)
package com.rmstar.enumsample; public enum Month { JANUARY("睦月", "冬"), FEBRUARY("如月", "冬"), MARCH("弥生", "春"), APRIL("卯月", "春"), MAY("皐月", "春"), JUNE("水無月", "夏"), JULY("文月", "夏"), AUGUST("葉月", "夏"), SEPTEMBER("長月", "秋"), OCTOBER("神無月", "秋"), NOVEMBER("霜月", "秋"), DECEMBER("師走", "冬"), ; private final String mOldJapaneseName; private final String mSeason; private Month(String oldJapaneseName, String season) { mOldJapaneseName = oldJapaneseName; mSeason = season; } public String getOldJapaneseName() { return mOldJapaneseName; } public String getSeason() { return mSeason; } }
Main.java(変更後)
package com.rmstar.enumsample; public class Main { public static void main(String[] args) { System.out.println(Month.JULY.getOldJapaneseName()); System.out.println(Month.JULY.getSeason()); } }
すっきり。
もう一つ。
MonthのInstance全ての旧暦を表示したい。
System.out.println(Month.JANUARY.getOldJapaneseName()); System.out.println(Month.FEBRUARY.getOldJapaneseName()); ・・・ System.out.println(Month.DECEMBER.getOldJapaneseName());
という風に,書く?
めんどくさい。
こういうことを楽にする仕組みが列挙型にはあるらしい。
次回は,そのような列挙型でできることを確認したいと思います。
では,また会えることを祈りつつ。