Short answer
An enum singleton is serialization-safe and reflection-safe for free — the JVM guarantees a single instance per constant even across deserialization, which a hand-rolled singleton must carefully defend against.
Explanation
Beyond constants, enums can have fields, constructors, and methods, and each constant can override behavior (constant-specific method bodies), making them ideal for strategy/state tables. They also work cleanly in switch and EnumMap/EnumSet, which are extremely fast array-backed implementations.
Common mistakes
- Forgetting enum singletons are serialization- and reflection-safe.
- Treating enums as only a list of constants.