Tengo las siguientes estructuras y clases de paquetes.Java accediendo a propiedad privada a través de Reflection
package X
Class A
private string fieldX;
protected string getFieldX(){ return fieldX};
package Y
Class B extends A
Class C extends B
Tengo el objeto ClassC y trato de obtener fieldX a través de la reflexión.
Class partypes[] = new Class[0];
Object arglist[] = new Object[0];
Method getContextMethod = ClassC.class.getMethod("getFieldX",partypes);
String retValue = (string) getContextMethod.invoke(classCInstance, arglist);
Pero obtengo la excepción NoSuchMethod.
Intenté también llegar directamente al campoX. Pero esta vez recibo la excepción NoSuchField.
Field reqField = ClassC.class.getDeclaredField("fieldX");
reqField.setAccessible(true);
Object value = reqField.get(classCInstance);
String retValue = (string) value;
¿Qué es lo que estoy haciendo mal? ¿Hay alguna manera de obtener este campoX del objeto ClassC?
Solución: (muchas gracias vz0 por la solución);
acceso directo al ámbito privado:
Field reqField = ClassA.class.getDeclaredField("fieldX");
reqField.setAccessible(true);
String value = (String)reqField.get(clazzc);
método de llamada;
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));
Esto no funcionará ya que el método no está declarado en 'ClassC'. – BalusC
Typo editado, thx. – vz0
Aclaración añadida. – vz0