2016-07-26 71 views
0

我有一個DTO這樣,當我反思時,我如何知道最後一個對象?

ADto{ 
    BDto bDto; 
    Cto cDto; 
} 

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

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

當我使用反映,我想獲得BDtoCDtoADto Object.Code這樣的:

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); 
      } 

     } 
    } 

我想收集所有的字符串aObj的BDtoCDto的值如何實現?或者我怎麼能知道我沒有硬代碼遞歸遍歷的領域?

+0

您的標題與您的問題有任何關係嗎? – EJP

回答

0

您直接嘗試從ADto類獲取字符串屬性,則不能。

首先獲取BDto屬性,然後檢索字符串屬性。做CDto相同屬性

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

我想提取一個通用的reflectUtil,而不是像'BDto'這樣的細節DTO硬代碼。 –

0

希望這有助於

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); 
     } 
    } 
} 

編輯基於評論。注意你的對象不應該有循環依賴。

+0

不僅兩個Dto,可能有BDD中的XDto。它是嵌套的。 –

相關問題