Ответ 1
Похоже, вам просто нужно использовать getMethod
вместо getDeclaredMethod
. Весь смысл getDeclaredMethod
заключается в том, что он находит только методы, объявленные в классе, на который вы его вызываете:
Возвращает объект Method, который отражает указанный объявленный метод класса или интерфейса, представленный этим объектом класса.
В то время как getMethod
имеет:
C выполняется поиск любых методов сопоставления. Если метод сопоставления не найден, алгоритм шага 1 рекурсивно вызывается над суперклассом C.
Это только найдет общедоступные методы. Если метод, которым вы пользуетесь, не является общедоступным, вы должны сами восстановить иерархию классов, используя getDeclaredMethod
или getDeclaredMethods
для каждого класса в иерархии:
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();
}