有没有办法检测某个类的超类是否覆盖了hashCode或equals?
D
延伸C
延伸B
延伸A
延伸Object
B
实现自己的哈希码并等于
A
false
B
true
C
true
D
true
这可能吗?
如果有一个解决方案需要A
覆盖hashCode and equals
而不是B
,那也没关系。主要的是我知道默认的Object
哈希码和等号没有被使用
答案 0 :(得分:1)
我查看了How to quickly determine if a method is overridden in Java中的示例并写道:
class A extends Object {
public boolean isHashCodeOverridden() throws Exception {
return !this.getClass()
.getMethod("hashCode")
.getDeclaringClass()
.equals(Object.class);
}
}
class B extends A {
public int hashCode() { return 0; }
}
class C extends B {}
class D extends C {}
然后
System.out.println(new A().isHashCodeOverridden());
System.out.println(new B().isHashCodeOverridden());
System.out.println(new C().isHashCodeOverridden());
System.out.println(new D().isHashCodeOverridden());
打印
false
true
true
true
正如所料。
答案 1 :(得分:0)
您可以使用反射并检查是否在类及其超类中声明了一个方法,如A.class.getDeclaredMethods()
,您将知道