有一个类,它的一些字段是用户定义的对象。我将会:
1.1当遇到类型为object的字段时,遍历该对象,该对象具有自己的字段
问题出在第2步;当我获取object字段的字段时,无法获取它们的值,因为我需要将一个对象传递给field.get(object)
,以指示我希望从哪个对象中提取字段的值,但是我如何使用object类型访问talking字段的当前对象呢?
代码如下:
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
内部对象是对象的List
,但在某些情况下也可以是非列表对象。
发布于 2019-06-06 03:23:31
可以帮助您入门的Here is a cool tutorial 。通常,get会返回一个对象,然后您可以将其转换为您想要的任何类型。此外,您还可以询问字段的类型,并根据字段的类型执行一些逻辑操作。还有一些很酷的方法可以让您更好地熟悉clazz.isAssignableFrom(obj.getClass())
你可以阅读更多关于它的here
https://stackoverflow.com/questions/56428490
复制相似问题