如何使用反射获得字段值


// 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 ?

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

反射泛型获取字段值

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

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

字段可能还没有初始化。例:

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
    }
}

本例中objnull。但是如果TestClass中的Object o已经被初始化,那么o的值就不会是null:

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

这不是null:

Object obj = f.get(t);  // will not be null

一种可能是遇到hibernate对实体执行的字节码操作。Hibernate实体是惰性加载的(默认情况下)。当你调用getter/setter方法时,Hibernate会在这些方法中添加钩子来加载实际的值。

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

相关内容

  • 没有找到相关文章

最新更新