Java:
Considere o seguinte código
class Foo {
}
class Bar {
private Foo foo = new Foo();
}
É possível em Foo
classe para obter a classe de foo
campo. Quer dizer, eu quero em Foo
obter Bar
classe. A questão é, naturalmente, sobre a reflexão, mas não sobre new Foo(Bar.class)
.
John Kuhn:
Se você deseja obter os chamadores Class, você pode usar o newish (introduzido no 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();
}
Se você usar uma versão mais antiga Java, há o não suportado sun.reflect.Reflection.getCallerClass()
.