Java 的方法可以“知道”它自己的名字吗? [复制]

Posted

技术标签:

【中文标题】Java 的方法可以“知道”它自己的名字吗? [复制]【英文标题】:Can Java's method "know" its own name? [duplicate] 【发布时间】:2012-09-03 21:18:50 【问题描述】:

可能重复:Getting the name of the current executing method

Java 中是否有方法让给定方法知道自己的名称?如果是这样,如何从方法内部引用它?

【问题讨论】:

您是否有特定的原因需要这样做,或者您只是好奇? 我想将函数名传递给 Timer 类,它可以智能地报告给定方法所用的时间,无需硬编码 看看:***.com/questions/442747/… @Jam,不确定您是否以正确的方式来计时特定方法,因为如果您已经在其中,将很难计时。 我正在寻找估价,但是是的,我明白你在说什么 【参考方案1】:

您可以通过分析堆栈跟踪来确定它。但它可能会带来相当大的性能损失。在 AOP 世界中,您还可以拥有将确定方法名称并将其存储在某种上下文中的方面。

在堆栈跟踪方法中,您会执行类似的操作

Exception e = new Exception();
e.fillInStackTrace();
e.getStackTrace()[0].getMethodName();

或(如评论中所建议)

Thread.currentThread().getStackTrace()[0].getMethodName();

【讨论】:

您不需要创建新的异常。 Thread 可以使用 getStackTrace() 返回堆栈跟踪。 @SteveKuo +1。你说的对。我更新了答案。 其实Thread.currentThread().getStackTrace()[0].getMethodName();将返回“getStackTrace”。 getStackTrace()[1] 可能是您想要的 - 调用 getStackTrace() 的例程的名称。就我而言,我想知道调用当前例程的例程的名称,所以 [2] 是我的答案。 @rcprcp 上面的代码必须放在想知道其名称的方法中。如果您在其上放置更多实用程序方法,您将始终需要调整堆栈跟踪。当我必须做这样的事情时,我只需传递一个参数,告诉调整量。 @AlexGitelman--(1) 我如何“调整堆栈跟踪”? (2)“在上面放更多实用方法”是什么意思(3)什么样的参数及其值告诉“调整量”?【参考方案2】:

堆栈跟踪的第一个元素(Thread.currentThread().getStackTrace(),请参阅this question)应该告诉您当前在运行时使用哪种方法。

【讨论】:

以上是关于Java 的方法可以“知道”它自己的名字吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java中参数个数一样的但是参数顺序不一样会构成重载吗?

你好,我想知道这个银行卡号是不是跟名字一致?

如何在 Swift 中保存复选标记?

Delphi中的Form中怎么调用Frame,ShowFrame()好像可以

java中接口可以实现多个接口吗?

你抢了那么多红包,知道它实现的原理吗?