はじめに
http://blogs.yahoo.co.jp/dk521123/32503689.htmlで、Enumのことを記載したが、 今回は、Enumに関連したJavaならではの実装方法を記載する
■ プロパティやメソッドの追加
* クラスのように、プロパティやメソッド(コンストラクタ)を追加できる
サンプル
ColorEnum.javapublic enum ColorEnum { Red("AKA", 1), Green("MIDORI", 2), Blue("AO", 3), Yellow("KIRO", 4); private final String name; private final int id; private ColorEnum(String name, int id) { this.name = name; this.id = id; } public String getCustomName() { return this.name; } public int getId() { return this.id; } }呼び出し側 : Main.java
public class Main { public static void main(String[] args) { for (ColorEnum color : ColorEnum.values()) { System.out.println( String.format( "hashCode : %S, name : %s, ordinal : %s, toString : %s, color : %s", color.hashCode(), color.name(), color.ordinal(), color.toString(), color)); System.out.println(String.format("getCustomName : %S, getId : %s", color.getCustomName(), color.getId())); } } }
出力結果
hashCode : 31952838, name : Red, ordinal : 0, toString : Red, color : Red getCustomName : AKA, getId : 1 hashCode : 4199273, name : Green, ordinal : 1, toString : Green, color : Green getCustomName : MIDORI, getId : 2 hashCode : 12213211, name : Blue, ordinal : 2, toString : Blue, color : Blue getCustomName : AO, getId : 3 hashCode : 14982605, name : Yellow, ordinal : 3, toString : Yellow, color : Yellow getCustomName : KIRO, getId : 4
■ 各Enum値での独自処理を記載する
Enumごとの処理で、基本的なJava本では、switch文を使って 以下のように書くことが一般的かと思う。 ~~~~~~ switch (enumValue) { case FATAL; // 何らかの処理1 break; case ERROR; // 何らかの処理2 break; ・・・ } ~~~~~~ ただ、Enum本体にabstractメソッドを追加して、 別の書き方もできる
サンプル
public enum LogLevel { ERROR { @Override public void doSomething() { System.out.println("doSomething from ERROR"); } }, WARN { @Override public void doSomething() { System.out.println("doSomething from WARN"); } }, INFO { @Override public void doSomething() { System.out.println("doSomething from INFO"); } }; /** ★ここ★ */ public abstract void doSomething(); }
参考文献
http://murayama.hatenablog.com/entry/20100508/1273322268http://d.hatena.ne.jp/ashigeru/20090119/1232365391