[英]Is there any way to tell PowerMock not to use MockClassLoader for all objects which are instantiated via java reflection?
[英]Perform java reflection on instantiated objects
我想获取已实例化的对象的所有字段。 从那里,我喜欢获取字段名称和字段值并将其附加到字符串
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.get(obj)
之前调用field.setAccessible(true)
field.get(obj)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.