Java Enum getDeclaringClass vs getClass
Java Enum类的文档说明了以下关于getDeclaringClass
:
返回与此枚举常量的枚举类型对应的Class对象。 当且仅当e1.getDeclaringClass()== e2.getDeclaringClass()时,两个枚举常量e1和e2具有相同的枚举类型。 (此方法返回的值可能与Object.getClass()方法返回的值不同,对于具有常量特定类主体的枚举常量。)
我不明白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()
返回相同的东西。