获取有关调用类的信息

kos*_*otr 1 java reflection

是否有可能获得有关调用另一个类的类的信息?


class Bar{
    public Bar{}

    public String getInvokingClassInfo(){
        return "...";
    }
}

class Foo{
    public Foo(){
       Bar bar = new Bar();
       System.out.println("Invoking class is: "+bar.getInvokingClassInfo());
    }
}
Run Code Online (Sandbox Code Playgroud)

如何到达这个地方:


System.out.println(bar.getInvokingClassInfo());
Run Code Online (Sandbox Code Playgroud)

关于调用(Foo)这个(Bar)的类的信息:

Invoking class: Foo
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 8

 StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
 String callerClassName = stackTrace[index].getClassName();
Run Code Online (Sandbox Code Playgroud)

这是获取当前线程的堆栈跟踪.如评论中所述,存在实现差异,因此如果您担心这样,您可以实现以下内容:

  • 循环遍历StackTraceElement数组(使用在循环外声明的计数器变量)
  • 无论何时遇到当前的类名和当前的方法, break
  • 获取数组的下一个元素 - 它将是调用者.(这就是index上面代码中的含义)
  • 如果上述内容未提供相关信息,您可以随时回复 new Exception().getStackTrace()