通过反射Java在对象中获取字段及其值

时间:2016-09-06 11:15:03

标签: java reflection

我在java中有一个Object,它有多个字段,我不知道它们的类型。我正在使用反射来获取字段及其值,但它似乎不起作用。

Object obj = gettingObjectFromSomeMethod();
    for (Field field : obj.getClass().getDeclaredFields()) {
            field.setAccessible(true); 
            Object value = field.get(obj); 
            if (value != null) {
                System.out.println(field.getName() + "=" + value);
            }
        }

输出:

serialVersionUID=8683452581122892189
DEFAULT_CAPACITY=10
EMPTY_ELEMENTDATA=[Ljava.lang.Object;@5649fd9b
DEFAULTCAPACITY_EMPTY_ELEMENTDATA=[Ljava.lang.Object;@6adede5
elementData=[Ljava.lang.Object;@2d928643
size=4
MAX_ARRAY_SIZE=2147483639

但是当我打印对象时,它会提供以下输出

[{long_name=Los Angeles, short_name=Los Angeles, types=[locality, political]}, {long_name=Los Angeles County, short_name=Los Angeles County, types=[administrative_area_level_2, political]}, {long_name=California, short_name=CA, types=[administrative_area_level_1, political]}, {long_name=United States, short_name=US, types=[country, political]}]

我想获得这些字段的价值..请建议做什么

1 个答案:

答案 0 :(得分:1)

我刚刚测试了它返回列表的代码作为对象响应,所以你可以这样做。但是,如果您需要特定字段,则可以使用field.getName()。

指定内部for循环中的条件
if(obj instanceof List){
    List myList = (List) obj;// this is your object which return from gettingObjectFromSomeMethod


            for (Object object : myList) {
                for (Field field : object.getClass().getDeclaredFields()) {
                    field.setAccessible(true);

                        System.out.println("field_Name"+
                        field.getName() + "field_Value"+field.get(object));
                }
            }
}   

如果此解决方案不起作用,请打印System.out.println(obj.getClass().getName());并让我知道它返回的时间