How to check if a class has overridden equals and hashCode

前端 未结 2 588
囚心锁ツ
囚心锁ツ 2021-01-02 09:05

Is there a way to find out if a class has overriden equals() and hashCode() ?

2条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2021-01-02 10:03

    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.

提交回复
热议问题