Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过反射获取场_Java_Reflection - Fatal编程技术网

Java 通过反射获取场

Java 通过反射获取场,java,reflection,Java,Reflection,我有一个被包裹的物体,所以每当我做以下事情时 Field[] fields = builder.getClass().getDeclaredFields(); String s = ""; for(Field f : fields) { s+= " " + f.getName(); } 我得到的字段不在我的类中。如果我想修改已包装的字段,是否可以通过反射进行修改 谢谢 编辑:是的,我在展

我有一个被包裹的物体,所以每当我做以下事情时

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

        String s = "";
        for(Field f : fields)
        {
            s+= " " + f.getName();
        }
我得到的字段不在我的类中。如果我想修改已包装的字段,是否可以通过反射进行修改

谢谢


编辑:是的,我在展开的对象上调用了它。抱歉-这是漫长的一天:/

我假设
builder.getClass()
返回了错误的类。您可能需要查找包装对象并对其调用
getClass()
,或者-如果您可以更改生成器-提供一个方法来获取包装对象的类。

您的意思是更改字段的值吗?您可以调用
f.set(builder,)
。不确定您所说的“包裹对象”是什么意思,可能是您想在执行“执行反射魔法”之前先将其展开。首先,您可以使用
YourClass.getDeclaredFields()
,而不是尝试使用object
builder
builder.getClass().getDeclaredFields()

其次,如果您的类被另一个类包装,这意味着外部对象持有对内部对象(希望是您的)的引用。因此,您必须发现外部对象,以查看它有哪些字段,以及哪些字段包含对内部对象的引用。然后调用
internal=outer.getField(“theFiledName”).getValue(builder)


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

不确定您的意思——该方法返回它所说的确切内容;如果需要包装的类的字段,请在该类上调用它。你能提供你所拥有的和你想要的更多细节吗?这可能有助于我们发布你的预期输出和实际输出。只有当你调用
f.setAccessible(true)时,请在将来使用StringBuffer构建类似的字符串第一个