给出一些类/接口(interface)。
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 的任何子类(假设 D 扩展了 C)重写了“int doSomething(int)”,那么在使用 E(扩展了 D,是的......这是一个大的类家族)时,我可以吗?定义第一个实现“int doSomething(int)”的父级?提前谢谢大家:)
最佳答案
您可以使用反射来做到这一点,即从对象具有的类开始,检查该类是否定义了由方法名称和参数类型标识的方法。如果该类没有定义该方法,您将获取其父类(super class)并进行检查,直到您点击Object
,在这种情况下该方法根本不可用。
对于公共(public)方法,这更容易,因为 Java 已经为此提供了内置方法:
Class<?> mostSpecificImplementor =
yourObject.getClass().getMethod( "doSomthing", int.class ).getDeclaringClass();
请注意,这仅适用于公共(public)方法,否则您必须自己搜索类层次结构(在本例中使用 getDeclaredMethod(...)
)。
关于java - 如何获取给定方法的实现类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8853104/