我在 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]}]
我想获取这些字段的值。请建议如何操作
最佳答案
我刚刚测试了它作为对象响应返回列表的代码,所以你可以像下面那样做。但是,如果您想要特定字段,则可以使用 field.getName() 在内部 for 循环中指定 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());
并告诉我它返回的时间
关于java - 通过反射Java获取对象中的字段及其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39347704/