我想获取已经实例化的对象的所有字段。从那里我想得到字段名称和字段值并将其附加到字符串
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 :(得分:5)
你的字段是私密的 - 这是一件好事,但它与Class.getFields
(强调我的)不相符:
返回一个包含Field对象的数组,该对象反映此Class对象所代表的类或接口的所有可访问的 public 字段。
您应该使用Class.getDeclaredFields
代替:
返回Field对象的数组,这些对象反映由此Class对象表示的类或接口声明的所有字段。这包括公共,受保护,默认(包)访问和私有字段,但不包括继承的字段。
要访问这些值,您需要在field.setAccessible(true)
之前致电field.get(obj)
。