Did you ever think about how hashCode() of java.lang.Enum implemented?
Surprisingly or not it’s
1 2 3 | |
it returns the Object’s hashCode which is an internal address of the object to a certain extend. From the first glance it totally makes sense since Enum values are singletons.
Now imagine you are building distributed system. Distributed systems use hashCode to
- determine which worker in a cluster should handle part of a huge job
- determine which node in a cluster should store given item of dataset (e.g. in distributed cache)
The same Enum instance would give you a different hashCode value in different JVMs/hosts, screwing up your Hadoop job or put/lookup in distributed storage. Just something I faced recently.