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

6

是否有办法获取调用类的实例对象?

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

我知道可以通过堆栈跟踪找到调用的类/方法,但我需要具体的实例来访问实例变量(例如示例中的val1)。

我知道这很糟糕,但是B类在一个不可更改的库中,因此几乎不可能在不重新构建整个项目的情况下传递所需的字段。


1
如果没有实例会怎样?你为什么需要它呢? - Sotirios Delimanolis
4
不,基本上你不能这样做。 - Jon Skeet
1个回答

2

如果没有将实例传递给调用者,或者将其存储在集合中,则无法访问调用者的实例。

要传递实例,您可以执行以下操作:

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”关键字将调用代码的实例传递给Class A中的foo方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接