2016-06-13 8 views
-1

Ich möchte den Wert einer Instanzvariablen "customerId" abrufen. Ich habe eine Reihe von Apis, die dieses Feld zurückgeben. In einigen der Apis ist dieses Feld unter der Basisklasse. In einigen Fällen ist es mehrere Ebenen darunter verschachtelt. Gibt es eine Möglichkeit, den Wert über den Feldnamen "customerId" abzurufen, unabhängig davon, wo die Instanzvariable ist?Java Reflection - Wert eines Feldes in verschachtelten Klassen abrufen

ZB:

Customer 
    customerId 

Order 
Customer 
    customerId 

Account 
Order 
    customerId 

Antwort

0

Try this:

public static Map<Field, Integer> getFieldWithName(Object o, Map<Field, Integer> list) throws IllegalAccessException { 
    Class<?> c = o.getClass(); 
    for(Field field : c.getDeclaredFields()) { 
     if(field.getName().equals("customerId") && field.getType().equals(int.class)) { 
      list.put(field, field.getInt(o)); 
     } else { 
      if(!field.isAccessible()) { 
       field.setAccessible(true); 
      } 
      getFieldWithName(field.get(o), list); 
     } 

    } 
    return list; 
} 

Dies wird eine Karte mit den Feldern zurückkehren genannt customerId und der in diesem Bereich gespeicherten Wert. Gl!

+0

Beachten Sie, dass im Falle einer zirkulären Referenzpräsenz dieser Code eine Ausnahme erzeugt, nach der diese Site benannt wird. Es wird auch nicht den Fall behandeln, wenn 'customerId' in einer Superklasse von 'o' deklariert ist. Und es ist anfällig für "NullPointerException". – user3707125

+0

Richtig, wollte nur zeigen, wie es gemacht werden kann. – STersteeg

+0

Danke, werde es versuchen –