获取当前正在执行的方法的名称

2022-08-31 04:22:32

有没有办法在Java中获取当前正在执行的方法的名称?


答案 1

从技术上讲,这将起作用...

String name = new Object(){}.getClass().getEnclosingMethod().getName();

但是,将在编译时创建一个新的匿名内部类(例如 )。因此,这将为部署此技巧的每个方法创建一个文件。此外,在运行时,每次调用时都会创建一个原本未使用的对象实例。因此,这可能是一个可接受的调试技巧,但它确实带来了很大的开销。YourClass$1.class.class

此技巧的一个优点是返回,可用于检索方法的所有其他信息,包括注释和参数名称。这样就可以区分具有相同名称的特定方法(方法重载)。getEnclosingMethod()java.lang.reflect.Method

请注意,根据JavaDoc的这个技巧不应该抛出一个,因为内部类应该使用相同的类装入器装入。因此,即使存在安全管理器,也无需检查访问条件。getEnclosingMethod()SecurityException

请注意:它需要用于构造函数。在(命名)方法之外的块期间,返回 。getEnclosingConstructor()getEnclosingMethod()null


答案 2

Thread.currentThread().getStackTrace()通常会包含您调用它的方法,但存在陷阱(请参阅Javadoc):

在某些情况下,某些虚拟机可能会从堆栈跟踪中省略一个或多个堆栈帧。在极端情况下,允许没有与此线程相关的堆栈跟踪信息的虚拟机从此方法返回零长度数组。