用辅助方法封装获得方法的名字

出于调试的目的,我的代码中有一部分我想记录一个方法的名字,如下所示:

val LOG = LogManager.getLogger(SomeClass::class.java.name) //... fun someMethod() { LOG.debug(Thread.currentThread().getStackTrace()[1].getMethodName()) 

我怎么能把这个作为一个简单而清晰的表达? 就像是:

 LOG.debug(getMethodName()) 

顺便说一下,我尝试过使用AspectJ,但是我使用Eclipse,Kotlin插件与1.1.1一起使用。 AspectJ将需要KAPT(据我所知),它不适用于1.1.1的Maven(我也在使用它)。

你可以在Thread上定义一个扩展函数,给你第一个方法:

 fun Thread.firstStackMethod() = stackTrace[1].methodName 

然后像这样调用它:

 LOG.debug(Thread.currentThread().firstStackMethod()) 

也许你甚至可以直接扩展Logger:

 fun Logger.debugMethodName(t: Thread) = debug(t.stackTrace[1].methodName) //use LOG.debugMethodName(Thread.currentThread()) 

你可以在文件级创建一个函数。

 fun getMethodName(): String = Thread.currentThread().stackTrace[1].methodName class Foo { ... } 

通过调整stackTrace号码,你可以得到你想要的级别。