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



我有一个java对象,它有多个字段,我不知道它们的类型。我正在使用反射来获取字段和它们的值,但它似乎不工作。

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

我想要得到这些字段的值。请建议怎么做

我刚刚测试了代码,它返回列表作为对象响应,所以你可以像下面这样做。然而,如果你想要特定的字段,你可以在内部for循环中使用field. getname()指定if条件。

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());并告诉我它返回

的时间

最新更新