0

我有一个类的静态方法,它是从对象或线程的另一个非静态方法调用的。
有没有办法知道它是从哪个线程或对象调用的?
我认为这是不可能的,我什么都不需要,只是想确认一下。

我的意思是这样的

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

5 回答 5

1

您可以查看线程的最新堆栈跟踪,通常是第四个条目,或者您可以迭代检查:

 StackTraceElement[] trace = Thread.currentThread().getStackTrace();
 if(trace.length > 3){
   System.out.println("Called from method " + trace[3].getMethodName() + " of class " + trace[3].getClassName());
 }
于 2013-07-14T14:35:12.387 回答
1

实际上,您可以打印堆栈跟踪以了解它是从哪个线程和对象调用的。

于 2013-07-14T14:23:21.493 回答
1

您可以使用

StackTraceElement[] el = Thread.currentThread().getStackTrace();

查看回溯,您可以从中找到调用者。

于 2013-07-14T14:24:32.090 回答
1

可以使用 找到该线程Thread.currentThread()。虽然找不到调用对象。可以通过解析堆栈跟踪找到调用方法,尽管这可能很慢。

于 2013-07-14T14:25:32.917 回答
1

您无法调用对象。您可以获取调用对象、线程和方法,但如果您需要引用,则必须this作为参数传递。

于 2013-07-14T14:26:41.930 回答