Java Enum getDeclaringClass与getClass

Java Enum类的文档介绍了关于getDeclaringClass的以下内容:

Returns the Class object corresponding
to this enum constant’s enum type. Two
enum constants e1 and e2 are of the
same enum type if and only if
e1.getDeclaringClass() ==
e2.getDeclaringClass(). (The value
returned by this method may differ
from the one returned by the
Object.getClass() method for enum
constants with constant-specific class
bodies.)

getClass和getDeclaringClass不同的时候我不明白。有人可以提供一个例子和解释吗?

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

public enum MyEnum {

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


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

这将生成表示A和B的类体的内部类。这些内部类将是MyEnum的子类。

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

另一方面,MyEnum.A.getDeclaringClass()将返回代表MyEnum的Class对象。

对于简单的枚举(即没有常量特定类的体),getClass()和getDeclaringClass()返回相同的事情。

http://stackoverflow.com/questions/5758660/java-enum-getdeclaringclass-vs-getclass

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Java Enum getDeclaringClass与getClass