// 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` ???
如何获取字段值?
我看了下面的答案,但我不明白为什么我会变空?
答案 0 :(得分:3)
我猜,但名称returnEntity
表明您可能正在处理Hibernate(或JPA)实体或类似实体。
当通过getter访问时,那些可能只是懒洋洋地加载它们的字段。如果您通过字段访问它们,则它们仍具有所有null
值。
答案 1 :(得分: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 o
中的TestClass
已初始化,则o
的值不会是null
:
class TestClass
{
Object o = new Object();
}
这不是null
:
Object obj = f.get(t); // will not be null
答案 2 :(得分:1)
一种可能性是你遇到了hibernate在实体上完成的字节码操作。 hibernate实体是延迟加载的(默认情况下)。当你调用其中一个方法时,hibernate会挂钩到getter / setter方法来加载实际值。
你应该总是在hibernate对象中使用getter / setter,而不是直接访问字段。