Mar*_*cel 6 java reflection instance
是否有可能获得调用类的实例对象?
class A{
void foo(){
Object o = getCaller(); //?? expect instance of B
long val1 = .. // get val1 of o via reflection
// do something where val1 is crucial
}
}
class B{
double val1 = Math.random();
public static void main(String[] args) {
new B().callFoo();
}
void callFoo(){
new A().foo();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过stacktrace找出调用类/方法但我需要conrete实例来访问实例变量(例如示例中的val1).
我知道它很脏但B类是在一个不可加工的库中,因此几乎不可能在不重建所有内容的情况下通过所需的字段.
您无法访问调用方的实例,除非该实例以某种方式传递给它或存储在集合中。
要传递实例,您可以执行以下操作:
class A{
void foo(Object caller){
long val1 = ..
// do something where val1 is crucial
}
}
class B{
double val1 = Math.random();
public static void main(String[] args) {
new B().callFoo();
}
void callFoo(){
new A().foo(this);
}
}
Run Code Online (Sandbox Code Playgroud)
“this”键会将调用代码的实例传递给 A 类中的 foo 方法