How to check if a class has overridden equals and hashCode
java
Solution
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.
Problem
Is there a way to find out if a class has overriden `equals()` and `hashCode()` ?