Java Enum getDeclaringClass vs getClass



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

返回对应的Class对象到此枚举常量的枚举类型。两个枚举常量e1和e2属于相同的enum类型当且仅当e1.getDeclaringClass () = =e2.getDeclaringClass()。(价值此方法返回的值可能不同从返回的那个枚举的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()返回相同的东西。

最新更新