Java Enum getDeclaringClass vs getClass

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

返回与此枚举常量的枚举类型对应的Class对象。 当且仅当e1.getDeclaringClass()== e2.getDeclaringClass()时,两个枚举常量e1和e2具有相同的枚举类型。 (此方法返回的值可能与Object.getClass()方法返回的值不同,对于具有常量特定类主体的枚举常量。)

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

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

 public enum MyEnum { A { void doSomething() { ... } }, B { void doSomethingElse() { ... } }; } 

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

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

另一方面, MyEnum.A.getDeclaringClass()将返回表示MyEnumClass对象。

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