对实例化对象执行java反射

dee*_*k28 0 java reflection

我想得到一个已经实例化的对象的所有字段.从那里我想得到字段名称和字段值并将其附加到字符串

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
}
Run Code Online (Sandbox Code Playgroud)

现在我的列表变量是空的.我检查过各种java反射教程,并且在执行反射之前都会实例化一个新对象.在我的情况下,我想实例化一个对象并设置某些变量,然后执行反射.请求帮助谢谢你

Jon*_*eet 5

你的领域是私人的 - 这是一件好事,但它并不适合Class.getFields(强调我的):

返回一个包含Field对象的数组,该对象反映此Class对象所表示的类或接口的所有可访问公共字段.

您应该使用Class.getDeclaredFields:

返回Field对象的数组,这些对象反映由此Class对象表示的类或接口声明的所有字段.这包括公共,受保护,默认(包)访问和私有字段,但不包括继承的字段.

为了访问这些值,你需要调用field.setAccessible(true)之前field.get(obj).