更新
如何使用Kotlin
获取当前正在执行的函数名称?
我试图获取当前正在执行的函数的函数名称,但它始终为null
val funName = Object().`class`.enclosingMethod?.name;
答案 0 :(得分:17)
我找到了一条路: -
let trimmedUrlRE = fullUrl.match("(https:\/\/twitter.com\/).*(\/.*)")
以上代码也可以改进为 -
val name = object : Any() {
}.javaClass.enclosingMethod.name
答案 1 :(得分:13)
如果您不需要在运行时动态发现名称,则还有另一种选择:
instance::method.name
在https://pl.kotl.in/1ZcxQP4b3上检查以下示例:
fun main() {
val test = Test()
test.methodA()
println("The name of method is ${test::methodA.name}")
}
class Test {
fun methodA() {
println("Executing method ${this::methodA.name}")
println("Executing method ${::methodA.name} - without explicit this")
}
}
执行main()
后,您将看到:
Executing method methodA
Executing method methodA - without explicit this
The name of method is methodA
通过这种方式,您可以利用所有的“ IDE智能”(重命名,查找出现的事件等),但是重要的是,在编译过程中,所有出现的instance::method.name
被Kotlin替换为普通字符串。如果您反编译Kotlin生成的字节码,则会看到:
public final void main() {
Test test = new Test();
test.methodA();
String var2 = "The name of method is " + "methodA"; // <--- ordinary string, no reflection etc.
boolean var3 = false;
System.out.println(var2);
}