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