クイック編集: 以下で指摘されているように、BFS を実行する必要がありますが、まだ考える時間がなかった新しいフィールドの取得を停止する必要があります。助けてくれてありがとう!
Java リフレクションを使用してクラスのフィールドを再帰的に取得しようとしており、基本的に表示するツリーを作成しています
Class
field1 class
field1.1 class
field1.2 class
field2 class
field 2.1 class
field 2.2 class
これは再帰的な適切なパーサーのためのものなので、再帰的な表示関数を作成するのはクールだと思いました。残念ながら、それは私を押しつぶしています。
Class1 と Class2 のフィールドを持つクラス Foo の例で、それぞれが異なるクラスのフィールドを持つことができます。
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
しかし、変数クラスを取得してそのフィールドなどを取得する方法がわかりません。この情報を含むフィールドは、クラス Field を提供します。
また、再帰を停止するポイントが必要なことはわかっていますが、プリマティブ フィールドで停止してもうまくいかないようです。どんな提案も役に立ち、私が身もだえしているように見えるものの核心を理解するのに本当に役立ちます.
補足: このクラスの手段については、クラスごとに表示メソッドを配置して呼び出すことができることはわかっていますが、リフレクションのプロセスはより興味深く、おそらく再利用できるように思えました。
TLDR: Field に含まれる実際のフィールドのクラスを取得するにはどうすればよいですか?
何かが足りない場合は申し訳ありませんが、最初の質問です。
御時間ありがとうございます!
-アレックス