2016-07-26 12 views
0

ich ein DTO wie diese haben,Wie kann ich das letzte Objekt erkennen, wenn ich nachdenke?

ADto{ 
    BDto bDto; 
    Cto cDto; 
} 

BDto{ 
    String a1; 
    String b1; 
    int b1; 
} 

CDto{ 
    String a2; 
    String b2; 
    int b2; 
} 

Wenn ich bedenke verwenden, möchte ich die BDto und CDto in ADto Object.Code wie folgt erhalten:

for (Field field : aObj.getClass().getDeclaredFields()) { 
      try { 
       Object fieldValue = field.get(object); 
//todo how to collect all String value in `BDto` and `CDto` of aObj 
       if (fieldValue instanceof String) { 
        shouldCheckFieldValues.add((String) fieldValue); 
       } 
      } catch (Exception e) { 
       logger.error("some error has happened when fetch data in loop", e); 
      } 

     } 
    } 

Ich möchte alle String sammeln Wert in BDto und CDto von aObj? Wie kann ich das erreichen? Oder wie kann ich das Feld kennen, das ich rekursiv durchlaufen muss ohne harten Code?

+0

Hat Ihr Titel irgendetwas mit Ihrer Frage zu tun? – EJP

Antwort

0

Sie versuchen direkt, die String-Attribute von AD zu Klasse zu bekommen, können Sie nicht.

Holen Sie sich zuerst das BDto-Attribut und rufen Sie dann die String-Attribute ab. Machen Sie dasselbe für CDto Attribut

for (Field field : aObj.getClass().getDeclaredFields()) { 
     try { 
      Object fieldValue = field.get(object); 
      //todo how to collect all String value in `BDto` and `CDto` of aObj 
      if (fieldValue instanceof BDto) { 
       for (Field field2 : fieldValue.getClass().getDeclaredFields()) 
        if (field2 instanceof String) { 
         shouldCheckFieldValues.add((String) field2); 
+0

Ich möchte eine gemeinsame reflectUtil, nicht mit Details DTO harten Code wie 'BDto' extrahieren. –

0

this helps

static void exploreFields(Object aObj) { 
    for (Field field : aObj.getClass().getDeclaredFields()) { 

     try { 
      Object instance_var = field.get(aObj); 
      if (instance_var instanceof String) { 
       System.out.println(instance_var); 

      } else if(!(instance_var instanceof Number)) { 
       exploreFields(instance_var); 
      } 
     } catch (Exception e) { 
      logger.error("some error has happened when fetch data in loop", e); 
     } 
    } 
} 

auf Kommentar basiert bearbeitet. Beachten Sie, dass Ihre Objekte keine zirkulären Abhängigkeiten haben sollten.

+0

nicht nur zwei Dto, möglicherweise XDto in BDto.It ist geschachtelt. –

Verwandte Themen