我想知道在Java中调用另一个类中的方法的对象的类型是什么,例如:
class A{
public A(){
//..
}
public void method1{
//here I'd like to find what's the type of the object which is calling this method
}
}
class B{
public B(){
A a = new A();
a.method1();
}
}
class C{
public C(){
A a = new A();
a.method1();
}
}
答案 0 :(得分:4)
您可以通过对代码的方法调用检查堆栈来执行此操作。查看Thread.getStackTrace()并使用
返回的当前主题Thread.currentThread()
您可以按照堆栈跟踪数组的方式备份并确定调用者链。但请注意文档中的警告:
在某些情况下,某些虚拟机可能会忽略一个或多个虚拟机 从堆栈跟踪堆栈帧。在极端情况下,虚拟 没有关于该线程的堆栈跟踪信息的机器是 允许从此方法返回零长度数组。
如果您需要找出谁为您的类的子集打电话,我会更改类,以便它们实现一些Caller
/ Callee
接口并实现方法签名:
public void doSomething(..., Caller caller);
您的调用类实现Caller
。这样你就可以执行一些相对类型安全的方法调用和参数传递。
答案 1 :(得分:2)
试试这个:
Thread.currentThread().getStackTrace()