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()` ?

Original source