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

标签 java inheritance object overriding introspection

给出一些类/接口(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/

相关文章:

java - 格式化 java 在 JSON 中注销以在 ELK Stack 中使用

Java指定子类构造函数签名

python - 如何使父类(super class)独有的类属性

javascript - 当调用 'this' 的函数位于子对象的对象内部时,您将如何引用 'this'?

angular - 对象的构造函数数组 - typescript

java - 获取 FontMetrics StackOverflowError

java - Wildfly 重新启动时,HornetQ 不遵循队列中的最后一个值

javascript - 命名数组和索引数组之间的区别 - javascript

java - 线程 "main"java.lang.NoClassDefFoundError : org/apache/log4j/Logger after creating an executable JAR but this is a JAVA Project 中出现异常

c# - 如何从另一个类访问 Winform 文本框控件?