锁定老帖子 主题:方法内 如何得到当前方法名
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-07
这种需求本身就不合理,如果不是公用的,在每个当前方法都要打。
直接在程序里指定不就可以了。 比如doIt() { String methodName = "doIt"; } 如果要公用,那么,比如AOP,获取当前被拦截的方法的名字是多么简单的一件事。 真不知道是爱好学术研究还是咋的,喜欢搞这种事情。 |
|
返回顶楼 | |
发表时间:2010-12-07
thinkaboutit 写道 这种需求本身就不合理,如果不是公用的,在每个当前方法都要打。
直接在程序里指定不就可以了。 比如doIt() { String methodName = "doIt"; } 如果要公用,那么,比如AOP,获取当前被拦截的方法的名字是多么简单的一件事。 真不知道是爱好学术研究还是咋的,喜欢搞这种事情。 感觉用处还是有的,比如手动抛出某些业务异常时或做一些重要log时,不想记录整个stack,那个就可以使用楼主的这种方法,进行一些精简的记录。 |
|
返回顶楼 | |
发表时间:2010-12-07
经常遇到来面试的人,用SSH做了几年项目,就号称精通JAVA,。。。
现在 真是需要 沉下心来深入一门语言背后的底层。。。多阅读优秀软件的源码。。 像这个问题,天天用log4j,其实这就是他的基本功能。。。 |
|
返回顶楼 | |
发表时间:2010-12-07
xiaguangme 写道 mtnt2008 写道 qianhd 写道 Thread.currentThread().getStackTrace()
返回一个表示该线程堆栈转储的堆栈跟踪元素数组。 何必再new一个excepetion 重新拷贝staceTrace ? +1 JDK上API: public final class StackTraceElementextends Objectimplements Serializable 堆栈跟踪中的元素,它由 Throwable.getStackTrace() 返回。每个元素表示单独的一个堆栈帧。所有的堆栈帧(堆栈顶部的那个堆栈帧除外)都表示一个方法调用。堆栈顶部的帧表示生成堆栈跟踪的执行点。通常,这是创建对应于堆栈跟踪的 throwable 的点。 从以下版本开始: 1.4 所以1.4以上的应该都一样吧 +1 行号也是能这样拿到的,前阵研究通过javassist修改字节码还能拿到方法的参数和返回值。 好多做trace的软件用类似的思路,btrace什么的,知识更复杂了很多 行号不一定能拿到,jdk上写了,和编译器设置有关 |
|
返回顶楼 | |