Javaの:
次のコードを考えてみましょう
class Foo {
}
class Bar {
private Foo foo = new Foo();
}
それがで可能であるFoo
クラスのクラスを取得するfoo
フィールドを。私は、私が欲しい、意味Foo
を取得するBar
クラスを。質問はなく、程度、反射についてはもちろんですnew Foo(Bar.class)
。
ジョン・クーン:
あなたが発信者クラスを取得したい場合は、(Javaの9に導入された)新しめ使用できるStackWalker
APIを。
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()
。