获取实现对象方法的类

时间:2014-08-08 07:45:02

标签: java reflection

我有一个对象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()ObjectObject A BBCD {{1}} {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()方法。