簡體   English   中英

對實例化對象執行Java反射

[英]Perform java reflection on instantiated objects

我想獲取已實例化的對象的所有字段。 從那里,我喜歡獲取字段名稱和字段值並將其附加到字符串

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反射教程,它們都在執行反射之前實例化了一個新對象。 就我而言,我想實例化一個對象並設置某些變量,然后執行反射。 會要求幫助的,謝謝

您的字段是私有的-很好,但是在Class.getFields (強調我的)上不能很好地發揮作用:

返回一個包含Field對象的數組,該對象反映此Class對象表示的類或接口的所有可訪問公共字段。

您應該改用Class.getDeclaredFields

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

為了訪問這些值,您需要在field.get(obj)之前調用field.setAccessible(true) field.get(obj)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM