java - 获取有关调用类的信息

标签 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());
    }
}

如何进入:


System.out.println(bar.getInvokingClassInfo());

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

Invoking class: Foo

最佳答案

 StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
 String callerClassName = stackTrace[index].getClassName();

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

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

关于java - 获取有关调用类的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296268/

相关文章:

java - JPA @SqlResultSetMapping 无法处理要映射到空 POJO 的空 sql 结果 - 而是抛出异常

Java 永远不会通过引用传递,对吗?...对吗?

java - SpringBootTest - 考虑在配置中定义类型为 'java.lang.String' 的 bean

c# - 从不同程序集中的类名解析类型

go - 接口(interface)指针的奇怪行为

c# - 属性继承与反射

c# - 使用反射创建通用 List<T>

java - 使用 Java 反射找到最匹配的 writeMethod

java - 无法访问自定义属性编辑器中的 JList 项

java - 使用 Guava Reflection 引用私有(private)字段