andriod 获取当前函数名

来源:互联网 发布:java随机数组生成 编辑:程序博客网 时间:2024/05/22 07:00

缘由
开发输出Log时经常会打印当前函数,于是就在网上查找相应的方法, 自己也总结了下:

直接上代码:

public class Utils {    private static final int STACK_TRACE_INDEX = 3;    private static final String SUFFIX = ".java";    public static String getHeadSuffix() {        try{            //获取调用的函数堆栈信息            StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();            StackTraceElement targetElement = stackTrace[STACK_TRACE_INDEX];            //获取类名            String className = targetElement.getClassName();            String[] classNameInfo = className.split("\\.");            if (classNameInfo.length > 0) {                className = classNameInfo[classNameInfo.length - 1] + SUFFIX;            }            //获取内部类            if (className.contains("$")) {                className = className.split("\\$")[0] + SUFFIX;            }            //获取当前方法名            String methodName = targetElement.getMethodName();            //获取当前行号            int lineNumber = targetElement.getLineNumber();            if (lineNumber < 0) {                lineNumber = 0;            }            //输出信息            StringBuffer sb = new StringBuffer();            sb.append(methodName.substring(0, 1).toUpperCase());            sb.append(methodName.substring(1));            String methodNameShort = sb.toString();            StringBuffer sb1 = new StringBuffer();            sb1.append("[ (");            sb1.append(className);            sb1.append(":");            sb1.append(lineNumber);            sb1.append(")#");            sb1.append(methodNameShort);            sb1.append(" ] ");            return sb1.toString();        }catch (Exception e){            return "[]";        }    }}

详细介绍:

Thread.currentThread().getStackTrace()返回的是一个StackTraceElement数组,内容为调用函数堆栈,并且以调用层级关系保存。

STACK_TRACE_INDEX = 3是因为Android是下标为3获取方法名, 纯Java是下标为2获取方法名。

0 0
原创粉丝点击