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()
,而不是尝试使用objectbuilder
:builder.getClass().getDeclaredFields()代码>
其次,如果您的类被另一个类包装,这意味着外部对象持有对内部对象(希望是您的)的引用。因此,您必须发现外部对象,以查看它有哪些字段,以及哪些字段包含对内部对象的引用。然后调用internal=outer.getField(“theFiledName”).getValue(builder)
现在,您可以完全按照在代码段中尝试的方式使用internal
不确定您的意思——该方法返回它所说的确切内容;如果需要包装的类的字段,请在该类上调用它。你能提供你所拥有的和你想要的更多细节吗?这可能有助于我们发布你的预期输出和实际输出。只有当你调用f.setAccessible(true)时,请在将来使用StringBuffer构建类似的字符串代码>第一个