对实例化对象执行java反射

对实例化对象执行java反射,java,reflection,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 generateQuer

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

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反射教程,它们都在执行反射之前实例化了一个新对象。在我的例子中,我想实例化一个对象,设置某些变量,然后执行反射。我会在这方面寻求帮助谢谢你你的领域是私有的-这是一件好事,但它不适合(我的重点):

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

您应改为使用:

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


为了访问这些值,您需要在
field.get(obj)
之前调用
field.setAccessible(true)
,您的字段是私有的-这是一件好事,但它不能很好地使用(强调我的):

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

您应改为使用:

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


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

您的代码甚至没有编译。我重命名了所有变量,并犯了一些错误。。。很抱歉你的代码甚至没有编译。我重命名了所有的变量并犯了一些错误。。。很抱歉啊。。谢谢你在那里发现了这个错误…这很有效!非常感谢。啊。。谢谢你在那里发现了这个错误…这很有效!非常感谢。