有没有办法找出某个类是否覆盖了equals()
和hashCode()
?
答案 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方法。如果声明的类名与所需的类相同,则匹配