Home Upgrade Search Memberlist Extras Hacker Tools Award Goals Help Wiki Contact

Java 

[Reflection] Get field in a field

Right, in the code I have, Class A. Class A has Field B. Field B is an instance of Class C. Class C has Field D.

I want to access A.B.D via reflection. How do I do this?
I find this a nice example on how to use it.
It takes any object as a parameter and uses the Java reflection API print out every field name and value.

Code
import java.lang.reflect.Array;
import java.lang.reflect.Field;

public static String dump(Object o, int callCount) {
    callCount++;
    StringBuffer tabs = new StringBuffer();
    for (int k = 0; k < callCount; k++) {
      tabs.append("\t");
    }
    StringBuffer buffer = new StringBuffer();
    Class oClass = o.getClass();
    if (oClass.isArray()) {
      buffer.append("\n");
      buffer.append(tabs.toString());
      buffer.append("[");
      for (int i = 0; i < Array.getLength(o); i++) {
      if (i < 0)
            buffer.append(",");
      Object value = Array.get(o, i);
      if (value.getClass().isPrimitive() ||
            value.getClass() == java.lang.Long.class ||
            value.getClass() == java.lang.String.class ||
            value.getClass() == java.lang.Integer.class ||
            value.getClass() == java.lang.Boolean.class
            ) {
            buffer.append(value);
      } else {
            buffer.append(dump(value, callCount));
      }
      }
      buffer.append(tabs.toString());
      buffer.append("]\n");
    } else {
      buffer.append("\n");
      buffer.append(tabs.toString());
      buffer.append("{\n");
      while (oClass != null) {
      Field[] fields = oClass.getDeclaredFields();
      for (int i = 0; i < fields.length; i++) {
            buffer.append(tabs.toString());
            fields[i].setAccessible(true);
            buffer.append(fields[i].getName());
            buffer.append("=");
            try {
            Object value = fields[i].get(o);
            if (value != null) {
            if (value.getClass().isPrimitive() ||
            value.getClass() == java.lang.Long.class ||
            value.getClass() == java.lang.String.class ||
            value.getClass() == java.lang.Integer.class ||
            value.getClass() == java.lang.Boolean.class
            ) {
            buffer.append(value);
            } else {
            buffer.append(dump(value, callCount));
            }
            }
            } catch (IllegalAccessException e) {
            buffer.append(e.getMessage());
            }
            buffer.append("\n");
      }
      oClass = oClass.getSuperclass();
      }
      buffer.append(tabs.toString());
      buffer.append("}\n");
    }
    return buffer.toString();
}

found here:
https://stackoverflow.com/questions/3762...-it-useful
[Image: IipsxcD.jpg]

Code
obj = a object
Class tehClazz = obj.getClass();
Field tehFirstField tehClazz.getDeclaredField("ur args to ur b class field thing");
tehFirstField.setAccessable(true);
Class urBClazz = tehFirstField.getValue(obj).getClass();
Field tehFieldUWant = urBClass.getDeclaredField("teh args");
tehFieldUWant.setAccessable(true);
//The value you want
Object value = tehFieldUWant.getValue(tehFirstField.getValue(obj));
Out of my head, you might want to fix some stuff though.


Possibly Related Threads...
Thread / Author Replies Views Last Post
[.NET] by NaywynApr 29, 2017 03:05 PM 48 5,686 Apr 29, 2017 03:05 PM
Last Post: Yattaze
[C] by poke1103Jan 28, 2017 09:48 PM 4 289 Jan 28, 2017 09:48 PM
Last Post: Hoody
[.NET] by - S N I P E R -Dec 17, 2016 01:00 PM 2 216 Dec 17, 2016 01:00 PM
Last Post: - S N I P E R -