获取Kotlin中的函数名称

时间:2018-01-10 06:49:20

标签: android kotlin

更新

如何使用Kotlin获取当前正在执行的函数名称?

我试图获取当前正在执行的函数的函数名称,但它始终为null

val funName = Object().`class`.enclosingMethod?.name;

2 个答案:

答案 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);
}