0
// getting entity
Object obj= items.get(i).returnEntity();

// finding fields
for(Field field : obj.getClass().getFields()){          
    if(field.getType().isAssignableFrom(String.class)){             
     Log.v(TAG, field.getName());  // it is working i can get field name

    Object value = field.get(obj); // value always `null` ???

如何获取字段的值?

我看了下面的答案,但我不明白为什么我得到 null ?

如何通过反射获取对象中的字段?

反射泛型获取字段值

4

3 回答 3

3

我猜,但名称returnEntity表明您可能正在处理 Hibernate(或 JPA)实体或类似实体。

那些可能只有在通过 getter 访问时才懒惰地加载他们的字段。如果您通过字段访问它们,它们仍然具有所有null值。

于 2013-06-03T15:44:07.033 回答
2

该字段可能尚未初始化。例如:

class TestClass
{
    Object o;
}

public class Test
{
    public static void main(String[] args)
    {
        TestClass t = new TestClass();
        Class c = t.getClass();
        Field f = c.getDeclaredField("o");
        Object obj = f.get(t);  // will be null
    }
}

在这种情况下obj将是null。但是如果Object oinTestClass已经被初始化,则 的值o不会是null

class TestClass
{
    Object o = new Object();
}

这不会是null

Object obj = f.get(t);  // will not be null
于 2013-06-03T16:04:27.503 回答
1

一种可能性是您遇到了休眠对实体进行的字节码操作。休眠实体是延迟加载的(默认情况下)。当您调用其中一种方法时,hibernate 会将钩子插入 getter/setter 方法以加载实际值。

您应该始终在休眠对象中使用 getter/setter,而不是直接访问字段。

于 2013-06-03T15:49:55.260 回答