Java Enum类的文档说明了以下关于getDeclaringClass
:
返回对应的Class对象 这个枚举常量的枚举类型。二 枚举常数e1和e2属于 相同的枚举类型当且仅当 e1.getDeclaringClass()== e2.getDeclaringClass()。 (价值 通过此方法返回可能会有所不同 从一个人返回的 枚举的Object.getClass()方法 具有常量特定类的常量 体。)
我不明白getClass
和getDeclaringClass
何时不同。有人可以提供一个例子和解释吗?
答案 0 :(得分:51)
允许Java枚举值具有特定于值的类主体,例如(我希望这种语法是正确的......)
public enum MyEnum {
A {
void doSomething() { ... }
},
B {
void doSomethingElse() { ... }
};
}
这将生成表示A
和B
的类主体的内部类。这些内部类将是MyEnum
的子类。
MyEnum.A.getClass()
将返回代表A
的类主体的匿名类,这可能不是您想要的。
MyEnum.A.getDeclaringClass()
将返回代表Class
的{{1}}对象。
对于简单的枚举(即没有常量特定类主体的枚举),MyEnum
和getClass()
会返回相同的内容。