首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从该方法中获取方法名称?

如何从该方法中获取方法名称?
EN

Stack Overflow用户
提问于 2011-04-06 02:44:09
回答 4查看 9.4K关注 0票数 6

我正在尝试创建一个从该方法中返回方法名称的函数:

代码语言:javascript
运行
复制
  public static String getMethodName(final int depth)
  {
    final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
    return ste[ste.length - 1 - depth].getMethodName();
  }

然而,当我从Activity.onCreate()调用这个方法时,它返回"main“而不是"onCreate”。

如何从该方法中获取实际的方法名称?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-04-06 02:58:15

代码语言:javascript
运行
复制
return ste[1+depth].getMethodName();

如果你像上面那样改变返回语句,你会得到直接调用方法名,过程深度应该是零..

票数 8
EN

Stack Overflow用户

发布于 2011-04-06 03:15:10

尽管启动异常的方式代价更高,但我还是会这么做。

代码语言:javascript
运行
复制
Log.d("CurrentMethod", new Exception().getStackTrace()[0].getMethodName());

如果在onCreate中调用,则有效。

票数 3
EN

Stack Overflow用户

发布于 2012-09-05 20:48:25

管理日志的单例:

代码语言:javascript
运行
复制
public class ActiveLog {
public static final String TAG = "TRACE LOG";
private static ActiveLog instance;
private static boolean actif;

public static ActiveLog getInstance() {
    if (null == instance) 
        instance = new ActiveLog();
    return instance;
}

private ActiveLog() {
    ActiveLog.setActif(true);
}

public void log() {
    if(isActif())
        Log.d(TAG, "" + (new Exception().getStackTrace()[1].getClassName())
                      + ": "
                      + (new Exception().getStackTrace()[1].getMethodName()));
}

public static boolean isActif() {
    return actif;
}

public static void setActif(boolean actif) {
    ActiveLog.actif = actif;
}}

下面是一个使用示例:

代码语言:javascript
运行
复制
public class MyTest {
  public void test() {
    ActiveLog.getInstance().log();
  }
}

结果是:

代码语言:javascript
运行
复制
09-05 14:37:09.822: D/TRACE LOG(XXXX): com.TestProject.MyTest: test
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5556834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档