在类和方法名称中获取方法的行号

时间:2013-10-01 09:29:56

标签: java android

我在android中开发自定义日志记录组件,我想获取方法名称,行号和类名,我尝试使用StackTraceElement,但我只能从它所调用的方法名称和行号获取, StackTraceElement的范围只在调用它的方法中,但我需要打印类中所有方法的方法名称和行号,有人可以帮我这样做吗?

2 个答案:

答案 0 :(得分:4)

对于班级名称

this.getClass().getName();

应该足够了。

对于我找到的行号

Thread.currentThread().getStackTrace()[1].getLineNumber();

,方法将是

Thread.currentThread().getStackTrace()[1].getMethodName()

请记住从getStackTrace()

访问数组中的正确元素

答案 1 :(得分:0)

对于具有相同查询的任何新访问, Java 9及更高版本为此目的提供了称为StackWalker

的附加功能。
List<StackFrame> stack =
StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE).walk((s) -> 
s.collect(Collectors.toList()));
System.out.println("All frames : \n" + stack.toString());

另请参阅

上的教程

StackWalkerExample