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



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

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

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

听起来您只需要使用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();
}

相关内容

  • 没有找到相关文章

最新更新