我有一个对象object
,我将调用它的方法toString
。我如何知道这个方法最后是在哪个类中实现的?
例如我们有层次结构:
class A /*extends Object */{
}
class B extends A{
public String toString() {
return "representation";
}
}
class C extends B{
}
class D extends C{
}
和对象
Object object = new SomeClass(); //(A/B/C/D/Object)
那么对于toString()
,我应该为Object
和A
获得Object
,但B
, C
和D
获得B
您可以使用Method.getDeclaringClass()
方法:
...
private Class<?> definingClass(Class<?> clz, String method) throws NoSuchMethodException, SecurityException {
Method m = clz.getMethod(method);
return m.getDeclaringClass();
}
...
System.err.println(definingClass(A.class, "toString"));
System.err.println(definingClass(B.class, "toString"));
System.err.println(definingClass(C.class, "toString"));
System.err.println(definingClass(D.class, "toString"));
...
结果:class java.lang.Object
class com.example.B
class com.example.B
class com.example.B
如果你需要查找有参数的方法,你需要适当地扩展definingClass()
方法