ToStringStyle.registry ThreadLocal initialValue should return a Set that implements reference equality checking instead of object equality.
This change would still protect against cyclical object graphs, but also protect against the following conditions:
- Incorrect implementations of hashCode/equals for any objects in the object graph
- Unintended side effects of the hashCode/equals methods for any objects in the object graph
Unfortunately, Java versions prior to 1.6 do not provide a simple built-in mechanism to create such a Set. This issue is discussed here in detail:
A possible work-around is to use an IdentityHashMap instead of a Set. This class is available in Java 1.4 and later.