0

クラスのフィールドに付ける注釈があります。そのアノテーションを使用してオブジェクト内のすべてのフィールドを深くトラバースし、フィールドの値で何かを行うメソッドを作成したいと考えています。それを行う最も簡単な方法(フレームワークなどを使用)は何ですか?

4

1 に答える 1

1

どうですか

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.*;

@Retention(RetentionPolicy.RUNTIME)
@interface Foo {

}

public class X {

    @Foo
    public X x = null;

    public static void main(String [] args) throws Exception {
        X root = new X();
        root.x = new X();
        root.x.x = new X();

        recurse(root);
    }

    private static void recurse(Object root) throws Exception {
        if (root == null) return; 

        for (Field f : root.getClass().getFields())
            if (f.getAnnotation(Foo.class) != null){
                System.out.println(root);
                recurse(f.get(root));
            }
    }

}

出力:

R.X@48b89bc5
R.X@63f5acd0
R.X@1624bef5
于 2013-10-17T23:54:24.313 に答える