我在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]}]
我想获得这些字段的价值..请建议做什么
答案 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());
并让我知道它返回的时间