Java Enum getDeclaringClass vs getClass

Los documentos para la clase Java Enum indican lo siguiente sobre getDeclaringClass :

Devuelve el objeto Class correspondiente a este tipo de enumeración de la constante enum. Dos constantes de enum e1 y e2 son del mismo tipo enum si y solo si e1.getDeclaringClass () == e2.getDeclaringClass (). (El valor devuelto por este método puede diferir del que devuelve el método Object.getClass () para las constantes enum con cuerpos de clase específicos de la constante).

No entiendo cuando getClass y getDeclaringClass son diferentes. ¿Alguien puede dar un ejemplo junto con una explicación?

Se permite que los valores enum de Java tengan cuerpos de clase específicos del valor, por ejemplo (y espero que esta syntax sea correcta …)

 public enum MyEnum { A { void doSomething() { ... } }, B { void doSomethingElse() { ... } }; } 

Esto generará clases internas que representan los cuerpos de clase para A y B Estas clases internas serán subclases de MyEnum .

MyEnum.A.getClass() devolverá la clase anónima que representa el cuerpo de clase de A, que puede no ser la que usted desea.

MyEnum.A.getDeclaringClass() , por otro lado, devolverá el objeto Class que representa MyEnum .

Para enumeraciones simples (es decir, las que no tienen cuerpos de clase específicos de constante), getClass() y getDeclaringClass() devuelven la misma cosa.