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

问题描述:

我想获取已经实例化的对象的所有字段。从那里我喜欢得到字段名称和字段值,并将其附加到字符串在实例化对象上执行java反射

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

你的代码甚至没有编译。 – dasblinkenlight 2014-09-05 21:06:08

+0

我重命名了所有变量并发生了一些错误...对不起! – deedeeck28 2014-09-05 21:52:37

你的领域是私人的 - 这是一件好事,但它不与Class.getFields(重点煤矿)发挥出色:

返回一个容纳Field对象的数组所有可访问的public由此Class对象表示的类或接口的字段。

应使用Class.getDeclaredFields代替:

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

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

+0

ahhh ..谢谢你在那里发现那个错误...这个工程!谢谢! – deedeeck28 2014-09-05 21:12:36