获取实现对象方法的类



我有一个对象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(),我应该为ObjectA获得Object,但B, CD获得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()方法

相关内容

  • 没有找到相关文章

最新更新