【Java】列挙型 / enum型 ~応用編 / Enumあれこれ ~

はじめに

http://blogs.yahoo.co.jp/dk521123/32503689.html
で、Enumのことを記載したが、
今回は、Enumに関連したJavaならではの実装方法を記載する

■ プロパティやメソッドの追加

 * クラスのように、プロパティやメソッド(コンストラクタ)を追加できる

サンプル

ColorEnum.java
public 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/1273322268
http://d.hatena.ne.jp/ashigeru/20090119/1232365391


関連記事

列挙型 / enum型 ~基本編~

http://blogs.yahoo.co.jp/dk521123/32503689.html

列挙型 / enum型 ~応用編 / EnumMap / EnumSet ~

http://blogs.yahoo.co.jp/dk521123/34469119.html