J'ai la structure de paquetage et les classes suivantes.
package X
Class A
private string fieldX;
protected string getFieldX(){ return fieldX};
package Y
Class B extends A
Class C extends B
J'ai l'objet ClassC et j'essaie d'obtenir fieldX par réflexion.
Class partypes[] = new Class[0];
Object arglist[] = new Object[0];
Method getContextMethod = ClassC.class.getMethod("getFieldX",partypes);
String retValue = (string) getContextMethod.invoke(classCInstance, arglist);
Mais je reçois l'exception NoSuchMethod.
J'ai également essayé de joindre directement le fieldX. Mais cette fois, j'obtiens l'exception NoSuchField.
Field reqField = ClassC.class.getDeclaredField("fieldX");
reqField.setAccessible(true);
Object value = reqField.get(classCInstance);
String retValue = (string) value;
Quelle est la chose que je fais mal ? Existe-t-il un moyen d'obtenir ce champX à partir de l'objet ClassC ?
Solution : (merci beaucoup vz0 pour la solution) ;
Accès direct à un terrain privé :
Field reqField = ClassA.class.getDeclaredField("fieldX");
reqField.setAccessible(true);
String value = (String)reqField.get(clazzc);
Appel à la méthode ;
Class partypes[] = new Class[0];
Object arglist[] = new Object[0];
Method getContextMethod = ClassA.class.getDeclaredMethod("getFieldX",partypes);
getContextMethod.setAccessible(true);
System.out.println((String)getContextMethod.invoke(clazzc, arglist));