有一个类,其中一些字段是用户定义的对象。我将:
获取主类的字段并遍历它们以获取其值。
1.1 当遇到类型为对象的字段时,通过该对象遍历其自己的字段
获取这些嵌套字段(对象类型字段的字段)的值
问题出现在第2步; 当我获得对象字段的字段时,无法获取它们的值,因为我需要传递一个对象到 field.get(object)
来指示我想要从中提取字段值的对象,但是如何访问具有对象类型字段的当前对象?
以下是代码:
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)
),为了获得其内部对象字段,我调用以下方法:topLevelField.getClass().getDeclaredField("details");
topLevelField.setAccessible(true);
topLevelField.get(primaryObject);
但是我无法访问父对象内实例化的对象字段,并出现以下错误:
java.lang.IllegalArgumentException: Can not set java.util.List field com.foo.Bar.details to com.foo.Bar
内部对象是一个对象的列表,但在某些情况下也可以是非列表对象。
setAccessible(true)
设置其可访问性)时,要获取其内部对象字段,请使用以下代码:topLevelField.getClass().getDeclaredField("details"); topLevelField.setAccessible(true); topLevelField.get(primarySetObject);
但是无法访问在父对象中实例化的对象字段,并出现此错误:java.lang.IllegalArgumentException: Can not set java.util.List field com.foo.Bar.details to com.foo.Bar
。内部对象是一个对象列表。 - DummyBeginner