Is there a way to find out if a class has overriden equals()
and hashCode()
?
You can use reflection
public static void main(String[] args) throws Exception {
Method method = Bar.class.getMethod("hashCode" /*, new Class>[] {...} */); // pass parameter types as needed
System.out.println(method);
System.out.println(overridesMethod(method, Bar.class));
}
public static boolean overridesMethod(Method method, Class> clazz) {
return clazz == method.getDeclaringClass();
}
class Bar {
/*
* @Override public int hashCode() { return 0; }
*/
}
will print false
if the hashCode()
is commented out and true
if it isn't.
Method#getDeclaringClass() will return the Class
object for the class where it is implemented.
Note that Class#getMethod(..) works for public
methods only. But in this case, equals()
and hashCode()
must be public
. The algorithm would need to change for other methods, depending.