猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
获取当前正在执行的方法的名称。
获取当前正在执行的方法的名称。
有办法在Java中获取当前正在执行的方法的名称吗?
30秒到达战场
浏览 1080
回答 3
3回答
墨色风雨
Thread.currentThread().getStackTrace()通常包含调用它的方法,但也有一些缺陷(请参阅Javadoc):在某些情况下,某些虚拟机可能从堆栈跟踪中省略一个或多个堆栈帧。在极端情况下,如果虚拟机没有有关此线程的堆栈跟踪信息,则允许该方法返回一个零长度数组。
0
0
0
慕妹3146593
从技术上讲这是可行的.。String name = new Object(){}.getClass().getEnclosingMethod().getName();但是,在编译期间将创建一个新的匿名内部类(例如,YourClass$1.class)。因此,这将创建一个.class用于部署此技巧的每个方法的文件。此外,在运行时,每次调用都会创建一个未使用的对象实例。因此,这可能是一个可以接受的调试技巧,但它确实会带来很大的开销。这个把戏的好处是getEncosingMethod()回报java.lang.reflect.Method可用于检索方法的所有其他信息,包括注释和参数名称。这使得区分具有相同名称的特定方法(方法重载)成为可能。注意,根据getEnclosingMethod()这个技巧不应该抛出SecurityException应该使用相同的类加载器加载内部类。因此,即使存在安全管理器,也不需要检查访问条件。它需要使用getEnclosingConstructor()建筑工人。在(命名)方法之外的块期间,getEnclosingMethod()回报null.
0
0
0
达令说
完整的代码将:/** * Get the method name for a depth in call stack. <br /> * Utility function * @param depth depth in the call stack (0 means current method, 1 means call method, ...) * @return method name */public static String getMethodName(final int depth){ final StackTraceElement[] ste = Thread.currentThread().getStackTrace(); //System. out.println(ste[ste.length-depth].getClassName()+"#"+ste[ste.length-depth].getMethodName()); // return ste[ste.length - depth].getMethodName(); //Wrong, fails for depth = 0 return ste[ste.length - 1 - depth].getMethodName(); //Thank you Tom Tresansky}更多这个问题.青色评论:我使用JRE 6并给出了不正确的方法名。如果我写ste[2 + depth].getMethodName().0是getStackTrace(),1是getMethodName(int depth)和2正在调用方法。为了取回方法名,需要计算要应用的正确索引。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
Java
源码
spark分组排序提取前N个值
1 回答
请问转让门店小程序需要源码吗?门店小程序有自己的源代码吗?是否要注册计算机软件著作权才可以交易?
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续