Re: Force implementation of equals() and hashCode()?
On Wed, 1 Oct 2008, Chris wrote:
Is there any way to force a class that implements an interface to
implement both equals() and hashCode()?
No.
I want all classes that implement a certain interface to work properly
in a HashMap. This means they need to implement their own version of
equals() and hashCode(). Trouble is, if I add those methods to the
interface, the system doesn't squawk if the class doesn't implement
them, because it just inherits them from Object.
interface ProperlyHashable {
public int properHashCode() ;
public boolean properEquals(Object obj) ;
}
class ProperWrapper<T extends ProperlyHashable> {
public final T proper ;
public ProperWrapper(T proper) {
this.proper = proper ;
}
public int hashCode() {
return proper.properHashCode() ;
}
public boolean equals(Object that) {
if (!that instanceof ProperWrapper) return false ;
return this.proper.properEquals(((ProperWrapper)that).proper) ;
}
}
class ProperHashMap<K extends ProperlyHashable, V> extends AbstractMap<K, V> {
private HashMap<ProperWrapper<K>, V> items = new HashMap<ProperWrapper<K>, V>() ;
public V put(K key, V value) {
return items.put(new ProperWrapper(key), value) ;
}
public V get(K key) {
return items.get(new ProperWrapper(key)) ;
}
// etc
}
tom
--
What we're dealing with here is a complete lack of respect for the law. --
Buford T. Justice