リフレクションを使用してフィールド値でクラスを取得する方法?

Javaの:

次のコードを考えてみましょう

class Foo {

}

class Bar {
    private Foo foo = new Foo();
}

それがで可能であるFooクラスのクラスを取得するfooフィールドを。私は、私が欲しい、意味Fooを取得するBarクラスを。質問はなく、程度、反射についてはもちろんですnew Foo(Bar.class)

ジョン・クーン:

あなたが発信者クラスを取得したい場合は、(Javaの9に導入された)新しめ使用できるStackWalkerAPIを。

class Foo {
    private static final StackWalker SW = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE);

    public Foo() {
        Class<?> bar = SW.getCallerClass();
    }
}

class Bar {
    private Foo foo = new Foo();
}

古いJavaバージョンを使用している場合は、サポートされていないがありますsun.reflect.Reflection.getCallerClass()

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=399216&siteId=1