从java中的对象获取值

时间:2016-02-24 07:26:22

标签: java reflection

我如何从这个对象中获取这些值?我试图getFields,getDeclaredFields等,但一切都是空的。

enter image description here

问题是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无法访问。

5 个答案:

答案 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