我有一个类的静态方法,它是从一个对象或线程的另一个非静态方法调用的 有没有办法知道它被调用的是哪个线程或对象? 我认为这是不可能的,我什么都不需要,但只想确认一下。
我的意思是这样的
class CallerID
{
public static void main(String ...s)
{
CallerID ob=new CallerID();
ob.caller();
}
void caller()
{
showCaller();
System.out.println("In this method, ob = "+this);
}
static void showCaller()
{
//code to get caller object ob like it is printed in method caller()
}
}
答案 0 :(得分:1)
实际上,您可以打印堆栈跟踪以了解它所调用的线程和对象。
答案 1 :(得分:1)
您可以使用
StackTraceElement[] el = Thread.currentThread().getStackTrace();
查看回溯,从中可以找到那里的来电者。
答案 2 :(得分:1)
可以使用Thread.currentThread()
找到该主题。
调用对象虽然无法找到。可以通过解析堆栈跟踪找到调用方法,尽管这可能非常慢。
答案 3 :(得分:1)
你无法获得对象调用。您可以获取调用对象,线程和方法,但是如果您想要引用,则必须将this
作为参数传递。
答案 4 :(得分:1)
您可以查看线程的最新堆栈跟踪,通常是第四个条目,或者您可以迭代检查:
StackTraceElement[] trace = Thread.currentThread().getStackTrace();
if(trace.length > 3){
System.out.println("Called from method " + trace[3].getMethodName() + " of class " + trace[3].getClassName());
}