给出一些类/接口。
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)”的第一个父级?
提前谢谢大家:)
答案 0 :(得分:3)
您可以使用反射来实现,即从对象具有的类开始,并检查该类是否定义了由methodname和parameter类型标识的方法。如果类没有定义该方法,那么你得到它的超类并检查它,直到你点击Object
,在这种情况下该方法根本不可用。
对于公共方法,由于Java已经有了内置方法,因此更容易:
Class<?> mostSpecificImplementor =
yourObject.getClass().getMethod( "doSomthing", int.class ).getDeclaringClass();
请注意,这仅适用于公共方法,否则您必须自己搜索类层次结构(在这种情况下使用getDeclaredMethod(...)
)。