JDK5.0 新機能:java.lang.Enum クラスの getDeclaringClass() というメソッド

「4.3. 定数ごとに異なる振る舞いを持った enum

基本的に、まんま

enum C2008082300_Color { RED, BLUE, YELLOW, BLACK, WHITE }

enum C2008082300_Style {
  BOLD()   { public String apply(String s) { return "<b>" + s + "</b>"; }},
  ITALIC() { public String apply(String s) { return "<i>" + s + "</i>"; }},
  RED()    { public String apply(String s) { return "<span style=\"color:#FF0000\">" + s + "</span>"; }};

  abstract public String apply(String s);
}

public class C2008082300 {
    public static void main(String[] args) {
        System.out.println(C2008082300_Color.class == C2008082300_Color.RED.getClass());
        System.out.println(C2008082300_Color.RED.getClass() == C2008082300_Color.BLUE.getClass());
        System.out.println(C2008082300_Color.class);
        System.out.println(C2008082300_Color.RED.getClass());
        System.out.println(C2008082300_Color.BLUE.getClass());

        System.out.println(C2008082300_Style.class == C2008082300_Style.BOLD.getClass());
        System.out.println(C2008082300_Style.BOLD.getClass() == C2008082300_Style.ITALIC.getClass());
        System.out.println(C2008082300_Style.class);
        System.out.println(C2008082300_Style.BOLD.getClass());
        System.out.println(C2008082300_Style.ITALIC.getClass());

        System.out.println(C2008082300_Style.class == C2008082300_Style.BOLD.getDeclaringClass());
        System.out.println(C2008082300_Style.BOLD.getDeclaringClass() == C2008082300_Style.ITALIC.getDeclaringClass());
        System.out.println(C2008082300_Style.class);
        System.out.println(C2008082300_Style.BOLD.getDeclaringClass());
        System.out.println(C2008082300_Style.ITALIC.getDeclaringClass());
    }
}

で、

true
true
class C2008082300_Color
class C2008082300_Color
class C2008082300_Color
false
false
class C2008082300_Style
class C2008082300_Style$1
class C2008082300_Style$2
true
true
class C2008082300_Style
class C2008082300_Style
class C2008082300_Style