有没有办法获取Java中当前正在执行的方法的名称?
从技术上讲这将起作用…
String name = new Object(){}.getClass().getEnclosingMethod().getName();
但是,将在编译时创建一个新的匿名内部类(例如YourClass$1.class)。因此,这将为.class每个部署此技巧的方法创建一个文件。另外,在运行时每次调用时都会创建一个其他未使用的对象实例。因此,这可能是可以接受的调试技巧,但确实会带来大量开销。
YourClass$1.class
该技巧的一个优点是getEncosingMethod()返回java.lang.reflect.Method值可用于检索方法的所有其他信息,包括注释和参数名称。这样就可以区分具有相同名称的特定方法(方法重载)。
getEncosingMethod()
java.lang.reflect.Method
请注意,根据JavaDoc的getEnclosingMethod()技巧,不应SecurityException使用相同的类加载器来加载内部类。因此,即使存在安全管理器,也无需检查访问条件。
JavaDoc
getEnclosingMethod()
SecurityException
必须getEnclosingConstructor()用于构造函数。在(命名的)方法之外的块中,getEnclosingMethod()返回null。
getEnclosingConstructor()
null