如何检查类是否覆盖了equals和hashCode

时间:2014-02-26 04:03:48

标签: java

有没有办法找出某个类是否覆盖了equals()hashCode()

2 个答案:

答案 0 :(得分:19)

您可以使用反射

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; }
     */
}
如果false已被注释,

将打印hashCode(),如果不注明,则会true

Method#getDeclaringClass()将返回实现它的类的Class对象。

注意 Class#getMethod(..)仅适用于public种方法。但在这种情况下,equals()hashCode()必须为public。该算法需要根据其他方法进行更改。

答案 1 :(得分:2)

要检查您的类中是否声明了方法,您可以使用以下代码。

System.out.println(C.getMethod("yourMethod").getDeclaringClass().getSimpleName());

在这里,您可以找到声明类的名称。

因此请检查子类中的代码以检查是否为equals或hasCode方法。如果声明的类名与所需的类相同,则匹配