java - 通过反射Java获取对象中的字段及其值

标签 java reflection

我在 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/

相关文章:

java - 使用反射调用方法时,最后一个变量参数不是可选的

java - 如何在不使用类名的情况下在静态方法中获取 Class 对象?

java - 正弦样本的离散傅立叶频谱分析的意外结果

java - 如何使用扫描仪确定行尾?

java - 如何使用 Guice 和 Play 框架正确实现和测试 map 绑定(bind)

java - java中使用Scrollbar改变颜色

java - 在 EJB 3.0 中我们在哪里提供 JNDI 名称?

java - 如何从 Java 中的 Lazy bean 获取真实的类名

java - 改进帖子中提到的反射代码?

c# - 使用 GetType() 创建 List<T>