如何获取方法参数的名称和值?

时间:2015-11-09 07:53:08

标签: kotlin

是否有可能在方法代码中获取方法参数的名称?有人能举例说明吗?

我此时只找到了这个解决方案,但不喜欢它......:

class Greeter() {

    fun greet(name: String) {
        val c = Greeter::class;
        for (m in c.memberFunctions) {
            if (m.name == "greet") {
                val p = m.parameters
                println(p.toString())
            }
        }
        println("Hello, ${name}");
    }
}

fun main(args: Array<String>) {
    Greeter().greet("UserName")
}

更新:我找到了另一个解决方案,但现在我还有一个问题: 如何在函数greet中获取ParamName,ParamValue对?

class Greeter() {

    fun greet(name: String) {
        val p = Greeter::greet.parameters
        println(p.toString())
        println("Hello, ${name}");
    }
}

fun main(args: Array<String>) {
    Greeter().greet("UserName")
}

1 个答案:

答案 0 :(得分:8)

参数名称可通过KParameter.name属性获取:

class Greeter() {
    fun greet(name: String) {
        val p = Greeter::greet.parameters
        println("Hello, ${p[0].name}")
    }
}
另一方面,

参数无法在JVM上以反射方式获得。