Java Enum getDeclaringClass против getClass - PullRequest
26 голосов
/ 22 апреля 2011

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

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

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

1 Ответ

51 голосов
/ 22 апреля 2011

Допускается, чтобы значения перечисления Java имели специфичные для значения тела классов, например (и я надеюсь, что этот синтаксис правильный ...)

public enum MyEnum {

   A {
       void doSomething() { ... }
   },


   B {
       void doSomethingElse() { ... }
   };
}

Это создаст внутренние классы, представляющие тела классов для A и B.Эти внутренние классы будут подклассами MyEnum.

MyEnum.A.getClass() и будут возвращать анонимный класс, представляющий тело класса A, что может быть не тем, что вы хотите.

MyEnum.A.getDeclaringClass(), с другой стороны, вернет объект Class, представляющий MyEnum.

Для простых перечислений (т. е. без константных тел классов), getClass() и getDeclaringClass() возвращают одно и то же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...