快速编辑:正如下面所指出的,我应该做一个 BFS,但我需要停止检索新字段,我还没有时间考虑。感谢所有的帮助!
我正在尝试使用 Java 反射递归地获取类的字段,本质上是创建一棵树来显示
Class
field1 class
field1.1 class
field1.2 class
field2 class
field 2.1 class
field 2.2 class
这是一个递归的体面解析器,所以我认为递归显示函数会很酷。不幸的是,它压垮了我。
示例类 Foo,具有 Class1 和 Class2 的字段,每个字段都可以有更多不同类的字段:
class Assignment extends Statement {
Variable target;
Expression source;
Assignment (Variable t, Expression e) {
target = t;
source = e;
}
我的递归方法:
private void recurse(Object object){
System.out.println(object.getClass());
for (Field field : object.getClass().getDeclaredFields()){
System.out.println(field.getType());
System.out.println(field.getName());
if(!field.getType().isPrimitive() || field.getType() instanceof Class || field.getName() != "clazz"){
//recurse(field);
}
}
println 一直用于测试,Foo 的示例输出将是(没有递归,它似乎有效)给出
class Assignment
class Variable
target
class Expression
source
但我不知道如何获取变量类,然后获取它的字段等等。包含此信息的字段为我提供了一个类字段。
另外,我意识到我需要一个点来停止递归,但在原始字段停止似乎不起作用。任何建议都会很有用,并且真的可以帮助我理解我似乎在四处游荡的本质。
旁注:对于这个类的方法,我知道我可以为每个类添加一个显示方法并调用它们,但我的反射过程似乎更有趣并且可能可重用。
TLDR:如何获取字段中包含的实际字段的类?
对不起,如果我遗漏了什么,我问的第一个问题。
谢谢你的时间!
-亚历克斯