如何获取给定方法的实现类?

时间:2012-01-13 15:40:26

标签: java inheritance object override introspection

给出一些类/接口。

public interface A {
    public int doSomthing(int x);
}

public class B implements A {
    int doSomthing(int x){
        //actually do something
    };
}

public class C extends B {
    //does some specific implementations of what B does
    // but does NOT override "int doSomething(int)"
}

如何在代码中使用实现C(或C的任何子类),我可以(以编程方式)确定B是实现int doSomething(int)的类。

或者,如果任何B的子类(比如说扩展C的D)覆盖“int doSomething(int)”那么,当使用E(扩展D,是的......这是一大类的类)时,我可以定义实现“int doSomething(int)”的第一个父级?

提前谢谢大家:)

1 个答案:

答案 0 :(得分:3)

您可以使用反射来实现,即从对象具有的类开始,并检查该类是否定义了由methodname和parameter类型标识的方法。如果类没有定义该方法,那么你得到它的超类并检查它,直到你点击Object,在这种情况下该方法根本不可用。

对于公共方法,由于Java已经有了内置方法,因此更容易:

Class<?> mostSpecificImplementor = 
  yourObject.getClass().getMethod( "doSomthing", int.class ).getDeclaringClass();

请注意,这仅适用于公共方法,否则您必须自己搜索类层次结构(在这种情况下使用getDeclaredMethod(...))。