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

2022-09-01 16:32:03

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

但是该类正在扩展另一个类,即具有该方法的类。我不太确定这是否会使它引发异常。plugingetFileNoSuchMethodException

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


答案 1

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

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

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();
}

答案 2