我如何从这个对象中获取这些值?我试图getFields,getDeclaredFields等,但一切都是空的。
问题是Field [] myField = o.getClass()。getDeclaredFields();总是返回一个空数组。 我以这种方式从数据库中获取这些值:
Query reqDisplayResponse = em.createNativeQuery("Select * FROM pxds_displayResponse");
List<Object> displayResponseList = reqDisplayResponse.getResultList();
我想打印这些值:
for(Object o: displayResponseList) {
for(Field field: o.getClass().getDeclaredFields()) {
log.info(field.getName());
}
}
遗憾的是,log.info无法访问。
答案 0 :(得分:1)
您应该使用getDeclaredField
,然后在其上使用get
,将对象作为参数传递。
像这样:
Field myField = object.getClass().getDeclaredField("_myField");
myField.setAccessible(true);
return (Integer) myField.get(object);
答案 1 :(得分:1)
尝试显示对象&#39; o&#39;像一个数组:
for(int index = 0 ; index < 10 ; index++){
Log.info(String.valueOf(o[index]));
}
答案 2 :(得分:1)
好的,这是解决方案。实际上object是一个数组,getDeclaredFields()返回空表,在文档中我们可以读到:
如果此Class对象表示数组类型,基本类型或void,则此方法返回长度为0的数组。
所以在这种情况下它是无用的。我们所要做的就是以这种方式迭代这个对象:
for(Object o: displayResponseList) {
for(int i = 0; i < 7; i++) {
System.out.println(((Object[])o)[i].toString());
}
System.out.println("...............");
}
希望这将有助于将来。
答案 3 :(得分:0)
我认为您尝试访问的字段是私有的
因此,为了访问私人字段,您必须: -
for (Field f : object.getClass().getDeclaredFields()) {
f.setAccessible(true);
Object o;
try {
o = f.get(object);
} catch (Exception e) {
o = e;
}
System.out.println(f.getGenericType() + " " + f.getName() + " = " + o);
}
答案 4 :(得分:0)
这是Eclipse调试器给出的ID,而不是Java。你无法访问它
有System.identityHashCode(Object)
来获取Object标识。 (不一样的身份证)
如果你想要一个类似Eclipse调试器中显示的ID,你必须自己分配它们。
以下是如何做到这一点的一般方向:
Elegant way to assign object id in Java