| Enum values that declare methods are a subclass of the actual enum type, so |
| calling `getClass()` returns a synthetic subclass of the enum. To retrieve the |
| type of the enum, use `getDeclaringClass()`. |
| |
| In the following example, `Binop.MULT.getClass()` returns the anonymous class |
| `Binop$2`, while `Binop.MULT.getDeclaringClass()` returns the class `Binop`. |
| |
| ```java |
| enum Binop { |
| MULT { |
| @Override |
| int apply(int x) { |
| return x * x; |
| } |
| }, |
| ADD { |
| @Override |
| int apply(int x) { |
| return x + x; |
| } |
| }; |
| |
| abstract int apply(int x); |
| } |
| ``` |
| |
| ```java |
| public class Test { |
| static void printEnumClass(Enum theEnum) { |
| System.err.println(theEnum.getClass()); |
| System.err.println(theEnum.getDeclaringClass()); |
| } |
| |
| public static void main(String[] args) { |
| printEnumClass(Binop.ADD); |
| } |
| } |
| ``` |
| |
| Prints: |
| |
| ``` |
| class Binop$2 |
| class Binop |
| ``` |