Sembra che sia sufficiente utilizzare getMethod
anziché getDeclaredMethod
. Il punto di getDeclaredMethod
è che solo trova metodi dichiarati nella classe si sta chiamando su:
Restituisce un oggetto metodo che riflette il metodo dichiarato specificato della classe o interfaccia rappresentata da questo oggetto Class .
Mentre getMethod
ha:
C viene cercato per tutti i metodi di corrispondenza. Se non viene trovato alcun metodo di corrispondenza, l'algoritmo di fase 1 viene richiamato ricorsivamente sulla superclasse di C.
che non potrà che trovare pubblici metodi però. Se il metodo che cercate non è pubblico, si dovrebbe ricorsione in alto nella gerarchia di classe da soli, utilizzando getDeclaredMethod
o getDeclaredMethods
su ogni classe nella gerarchia:
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();
}
fonte
2013-07-30 17:40:21
+1, una soluzione migliore che ho avuto. – rgettman
Se aiuta, il motivo per cui sto usando questo è dovuto al fatto che il metodo è privato in primo luogo. Annd quindi modifichi. Va bene, proverò la modifica. – PaulBGD
@Ultimate: Beh sì, è piuttosto importante. Sarebbe stato utile se lo avessi menzionato per cominciare. –