我有一个对象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
和Object
A
B
,B
,C
和D
{{1}} {1}}
答案 0 :(得分:6)
您可以使用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()
方法。