2014-11-21 38 views
1

我正在寫一個獲取Object的方法,並使用Object的字段執行一些邏輯。java會通過數組字段而不會創建新的實例

我的方法是這樣的:

public void exampleCast(Object obj) { 
    Field[] fields = obj.getClass().getFields(); 
    for (Field field : fields) {      
     if (field.getClass().isArray()) { 

     /* 
      HOW CAN I GO OVER THE ARRAY FIELDS , WITHOUT CREATING NEW INSATCNE ? 
      SOMETHING LIKE: 
      for (int i = 0; i < array.length; i++) { 
       array[i] ... 
      } 

     */ 
     } else { 
      ... 
      ... 
     } 
    } 
} 

和實例對象:

class TBD1 { 
public int x; 
public int y; 
public int[] arrInt = new int[10]; 
public byte[] arrByte = new byte[10]; 
} 

而且打電話給我的方法:

TBD1 tbd1 = new TBD1(); 
exampleCast(tbd1); 

在我mehod我不知道我怎麼能在不創建新實例的情況下獲取數組值(使用「newInstance」方法) 是可能嗎? (請參閱我在我的例子寫的評論)

我看那些2網站: http://jroller.com/eyallupu/entry/two_side_notes_about_arrays

http://tutorials.jenkov.com/java-reflection/arrays.html

但沒有得到我想要的。

請幫助:) 感謝

回答

3

如果我理解你的問題,你可以使用java.lang.reflect.Array和類似

if (field.getType().isArray()) { // <-- should be getType(), thx @Pshemo 
    Object array = field.get(obj); 
    int len = Array.getLength(array); 
    for (int i = 0; i < len; i++) { 
     Object v = Array.get(array, i); 
     System.out.println(v); 
    } 
} // ... 
+1

它不應該是'getType',而不是'getClass'?如果我沒有錯誤''FieldClass'調用'Field'實例會返回給我們'Field.class',這絕對不是一個數組。我們想要做的是檢查* type *是否是數組。 – Pshemo 2014-11-21 20:09:45

相關問題