Java Enum getDeclaringClass vs getClass

时间:2011-04-22 18:27:36

标签: java enums

Java Enum类的文档说明了以下关于getDeclaringClass

的内容
  

返回对应的Class对象   这个枚举常量的枚举类型。二   枚举常数e1和e2属于   相同的枚举类型当且仅当   e1.getDeclaringClass()==   e2.getDeclaringClass()。 (价值   通过此方法返回可能会有所不同   从一个人返回的   枚举的Object.getClass()方法   具有常量特定类的常量   体。)

我不明白getClassgetDeclaringClass何时不同。有人可以提供一个例子和解释吗?

1 个答案:

答案 0 :(得分:51)

允许Java枚举值具有特定于值的类主体,例如(我希望这种语法是正确的......)

public enum MyEnum {

   A {
       void doSomething() { ... }
   },


   B {
       void doSomethingElse() { ... }
   };
}

这将生成表示AB的类主体的内部类。这些内部类将是MyEnum的子类。

MyEnum.A.getClass()将返回代表A的类主体的匿名类,这可能不是您想要的。

另一方面,

MyEnum.A.getDeclaringClass()将返回代表Class的{​​{1}}对象。

对于简单的枚举(即没有常量特定类主体的枚举),MyEnumgetClass()会返回相同的内容。