Допускается, чтобы значения перечисления Java имели специфичные для значения тела классов, например (и я надеюсь, что этот синтаксис правильный ...)
public enum MyEnum {
A {
void doSomething() { ... }
},
B {
void doSomethingElse() { ... }
};
}
Это создаст внутренние классы, представляющие тела классов для A
и B
.Эти внутренние классы будут подклассами MyEnum
.
MyEnum.A.getClass()
и будут возвращать анонимный класс, представляющий тело класса A
, что может быть не тем, что вы хотите.
MyEnum.A.getDeclaringClass()
, с другой стороны, вернет объект Class
, представляющий MyEnum
.
Для простых перечислений (т. е. без константных тел классов), getClass()
и getDeclaringClass()
возвращают одно и то же.