lundi 12 février 2018

Java Reflection: Get field directly from an instance (not from its class)

I don't want to get the field from the class of my object like this:

myObject.getClass().getField(...);

But from the instance directly (something like: myObject.getField(...))! Why? Because its class doesn't contain exact information about the field in this special case:

public void main() throws NoSuchFieldException {
    final GenericClass<String> theInstance = new GenericClass<>();
    theInstance.theField = new String();

    // Directly, but without Reflection:
    System.out.println(theInstance.theField.getClass().getName());

    // By Reflection, but indirectly (via getClass()):
    System.out.println(theInstance.getClass().getField("theField").getType().getName());
}

static class GenericClass<T> {
    public T theField;
}

Output:

java.lang.String
java.lang.Object

The second output is correct but isn't exact. I know the reason, but don't want the reason. I want to access the field directly from theInstance (through reflection).


NOTE: I will have access to theField by its name (as a String at run-time), so MUST use reflection (or something like that)!





Aucun commentaire:

Enregistrer un commentaire