在实例化对象上执行Java反射

deedeeck28

我想获取已经实例化的对象的所有字段。从那里我喜欢获取字段名称和字段值并将其附加到字符串

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.setAccessible(true)之前致电field.get(obj)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章