// 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
}
}
本例中obj
为null
。但是如果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,而不是直接访问字段。