Java Enum getDeclaringClass vs getClass

2022-09-01 09:36:24

Java Enum 类的文档声明了以下内容:getDeclaringClass

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

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


答案 1

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

public enum MyEnum {

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


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

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

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

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

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


答案 2