首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Java反射获取嵌套字段( object类型字段的字段)的值

使用Java反射获取嵌套字段( object类型字段的字段)的值
EN

Stack Overflow用户
提问于 2019-06-03 21:34:01
回答 1查看 863关注 0票数 2

有一个类,它的一些字段是用户定义的对象。我将会:

  1. 获取主类的字段并遍历它们以获取它们的值。

1.1当遇到类型为object的字段时,遍历该对象,该对象具有自己的字段

  • 获取这些嵌套字段(对象类型字段的字段)的值

问题出在第2步;当我获取object字段的字段时,无法获取它们的值,因为我需要将一个对象传递给field.get(object),以指示我希望从哪个对象中提取字段的值,但是我如何使用object类型访问talking字段的当前对象呢?

代码如下:

代码语言:javascript
复制
public class PrimaryClass {
    String str;
    int num;
    MyClass cls;
}


PrimaryClass primaryObject = new PrimaryClass();

Field[] primaryObjectFields = primaryObject.getClass().getDeclaredFields();

// ... One of the fields is :  MyClass foo.bar.cls
// Assuming stored with name of clsField 

Field[] myClassObjectFields = clsField.getType().getDeclaredFields();

for (Field f : myClassObjectFields) {

    String fieldValue = f.get(primaryObject /* What to pass here? */); 
    // !!!! The above line Doesn't work since the primary Object doesn't have access to its child's fields

    System.out.println(fieldValue);

}

当我获得第一级字段(并用setAccessible(true)将其设置为可访问)时,为了获得它的内部对象字段,我调用以下代码:

代码语言:javascript
复制
topLevelField.getClass().getDeclaredField("details"); 
topLevelField.setAccessible(true);
topLevelField.get(primaryObject);

但无法访问在父对象内实例化的对象字段,并收到此错误:

代码语言:javascript
复制
java.lang.IllegalArgumentException: Can not set java.util.List field com.foo.Bar.details to com.foo.Bar

内部对象是对象的List,但在某些情况下也可以是非列表对象。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56428490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档