Подтвердить что ты не робот

Java Enum getDeclaringClass vs getClass

Документы для класса Java Enum содержат следующее о getDeclaringClass:

Возвращает соответствующий объект класса к этому перечисляемому постоянному типу перечисления. Два константы enum e1 и e2 относятся к тот же тип перечисления тогда и только тогда, когда e1.getDeclaringClass() == e2.getDeclaringClass(). (Значение возвращенный этим методом, может отличаться от того, который был возвращен Object.getClass() для перечисления константы с константным классом тел.)

Я не понимаю, когда getClass и getDeclaringClass разные. Может ли кто-нибудь привести пример вместе с объяснением?

4b9b3361

Ответ 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() возвращают одно и то же.