Art*_*are 6 java reflection callstack stack-trace
有一个库用一些参数调用我的方法.我想收到另一个参数,但是库没有将它提供给它调用的方法.
通过反编译库,我可以看到它有参数,并且它被分配给一个实例变量(不是私有的,但也不是公共的.)我知道如果我有实例,我可以使用反射获取变量,但是我不知道也没有实例.
有没有办法可以获得实例?SecurityManager有getClassContext(),但这只是给我实例的类 - 我想要实例本身.
作为我想要的一个简单例子:
public class A {
int b;
public A(int b, int c) {
this.b = b;
D(c);
}
}
public class D {
public D(int c) {
// Somehow I want to get at the calling instance of A's b from here,
// and A belongs to a library which I didn't write.
}
}
Run Code Online (Sandbox Code Playgroud)
或者......我知道b在callstack上用作参数.因此,如果有人知道如何访问b传递给A构造函数的内容,那将是可以接受的.
如果这些都不可行......我可以A按照我想要的方式进行反编译和编译,然后我需要做一些类加载魔法或者我必须修改jar的内容.这些都不合适,所以我希望有人知道如何从调用堆栈访问实例A或参数b.
你不能这样做。请参阅这篇文章了解更多详细信息。
不存在“所有者”这样的东西,因此您无法获取调用实例,除非指定了对父级的显式引用:
class A {
int b;
A(int b, int c) {
this.b = b;
new D(this, c);
}
}
class D {
D(A a, int c) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
看来,要么根据库,你不应该得到这样的实例,要么它设计得很糟糕。
| 归档时间: |
|
| 查看次数: |
3545 次 |
| 最近记录: |