Hi guys, I'm a practical guy, not a purist, but the 3.0 implementations of NamespaceWatcher.hashCode() and equals() are bothering me. The reason I care is that I want to avoid subtle bugs cropping up.
So here's the problem. 1) equals() is not reflexive between NamespaceWatcher and Watcher Assuming you have a NamespaceWatcher nw wrapping a Watcher w, the following code might or might not work: container.add(nw) container.remove(w) It depends on whether the underlying container ultimately does "nw.equals(w)" or "w.equals(nw)". Set.contains() would have the same problem. 2) hashCode() and equals() inconsistent with each other Because nw.hashCode() != w.hashCode(), lookups in a hashSet or hashMap will practically never work except by luck. hashSet.put(nw) hashSet.contains(w) Most of the time this will return false, except in the exact case where nw and w happen to have hashCodes that map into the same bucket, and the equality check is done the "right" order. So.... taking a step back, what was underlying motivation for the hashCode / equality changes? IE, what's the bigger problem we were trying to solve? Scott
