通过反思获得领域

时间:2011-12-01 16:13:19

标签: java reflection

每当我执行以下操作时,我都有一个被包裹的对象;

        Field[] fields = builder.getClass().getDeclaredFields(); 

        String s = "";
        for(Field f : fields)
        {
            s+= " " + f.getName();
        }

我得到的不是我班上的字段。如果我想修改一个被包裹的字段,是否可以通过反射来实现?

由于

编辑:是的,我在未打开的对象上调用它。对不起 - 这是漫长的一天:/

3 个答案:

答案 0 :(得分:0)

我认为builder.getClass()返回错误的类。您可能必须查找包装对象并在其上调用getClass()或 - 如果您可以更改构建器 - 提供获取包装对象类的方法。

答案 1 :(得分:0)

你的意思是改变字段的值吗?你可以打电话给f.set(builder, <value>)。不确定包裹物的意思,可能是你想要在执行反射魔法之前打开它

答案 2 :(得分:0)

首先,您可以使用YourClass.getDeclaredFields()而不是尝试使用对象builder访问字段:builder.getClass().getDeclaredFields();

其次,如果你的类被其他类包装,则意味着外部对象保持对内部对象的引用(希望是你的)。因此,您必须发现外部对象以查看它具有哪些字段以及哪个字段保存对内部对象的引用。然后拨打inner =outer.getField("theFiledName").getValue(builder)

现在,您可以完全按照在代码段中尝试的方式使用inner