首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用.getDeclaredMethod从扩展另一个类的类中获取方法

使用.getDeclaredMethod从扩展另一个类的类中获取方法
EN

Stack Overflow用户
提问于 2013-07-31 01:38:45
回答 1查看 23.3K关注 0票数 25

假设我正在尝试使用Method m = plugin.getClass().getDeclaredMethod("getFile");从一个类中获取一个方法。

但是该plugin类正在扩展另一个类,即具有getFile方法的那个类。我不太确定这是否会让它抛出NoSuchMethodException异常。

我知道plugin正在扩展的类有getFile方法。抱歉,如果我听起来很困惑,有点累。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-31 01:40:22

听起来你只需要使用getMethod而不是getDeclaredMethodgetDeclaredMethod的全部意义在于,它只查找在调用它的类中声明的方法:

返回一个Method对象,该对象反映这个class对象所表示的类或接口的指定声明方法。

getMethod具有:

C中搜索任何匹配的方法。如果没有找到匹配的方法,则在C的超类上递归调用步骤1的算法。

不过,这只能找到公共方法。如果您想要的方法不是公共的,您应该自己递归类层次结构,在层次结构中的每个类上使用getDeclaredMethodgetDeclaredMethods

Class<?> clazz = plugin.getClass();
while (clazz != null) {
    Method[] methods = clazz.getDeclaredMethods();
    for (Method method : methods) {
        // Test any other things about it beyond the name...
        if (method.getName().equals("getFile") && ...) {
            return method;
        }
    }
    clazz = clazz.getSuperclass();
}
票数 71
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17953724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档