2014-09-05 59 views
0

我想獲取已經實例化的對象的所有字段。從那裏我喜歡得到字段名稱和字段值,並將其附加到字符串在實例化對象上執行java反射

public static void main(String[] args) { 

TestObject obj = new TestObject(); 
obj.setName("Toothbrush"); 
obj.setType("Toiletries"); 
String result = generateQuery(obj); 
} 

public static String generateQuery(TestObject obj){ 
    String result; 
    Field[] lists = obj.getClass().getFields(); 
    for(Field i : lists){ 
     try { 
     result += i.getName(); 
     result += i.get(obj); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } 
    } 
    return result; 
} 

public class TestObject(){ 
private String name; 
private String type; 

// getters and setters 
} 

現在我的列表變量是空的。我已經檢查過各種java反射教程,它們都在執行反射之前實例化一個新對象。在我的情況下,我想實例化一個對象並設置某些變量,然後執行反射。將請求在這個幫助謝謝

+0

你的代碼甚至沒有編譯。 – dasblinkenlight 2014-09-05 21:06:08

+0

我重命名了所有變量併發生了一些錯誤...對不起! – deedeeck28 2014-09-05 21:52:37

回答

5

你的領域是私人的 - 這是一件好事,但它不與Class.getFields(重點煤礦)發揮出色:

返回一個容納Field對象的數組所有可訪問的public由此Class對象表示的類或接口的字段。

應使用Class.getDeclaredFields代替:

返回Field對象反映此Class對象所表示的類或接口聲明的所有字段的數組。這包括公共,受保護,默認(包)訪問和專用字段,但不包括繼承字段。

爲了訪問這些值,您需要在field.get(obj)之前撥打field.setAccessible(true)

+0

ahhh ..謝謝你在那裏發現那個錯誤...這個工程!謝謝! – deedeeck28 2014-09-05 21:12:36