获取调用者的实例(通过反射)



是否有可能获得调用类的实例对象?

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();
    }
}

我知道我可以通过stacktrace找到调用类/方法,但我需要具体的实例来访问实例变量(如示例中的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);
    }
}

this键键将把调用代码的实例传递给类A中的foo方法

最新更新