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

时间:2013-07-30 17:38:45

标签: java reflection

所以我想说我正在尝试使用Method m = plugin.getClass().getDeclaredMethod("getFile");从类中获取方法。

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

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

1 个答案:

答案 0 :(得分:60)

听起来您只需要使用getMethod代替getDeclaredMethodgetDeclaredMethod的重点在于找到在您调用它的类中声明的方法:

  

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

getMethod有:

  在

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

但这只会找到 public 方法。如果您所使用的方法不公开,则应自行递归类层次结构,在层次结构中的每个类上使用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();
}