是否有可能在方法代码中获取方法参数的名称?有人能举例说明吗?
我此时只找到了这个解决方案,但不喜欢它......:
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")
}
答案 0 :(得分:8)
参数名称可通过KParameter.name
属性获取:
class Greeter() {
fun greet(name: String) {
val p = Greeter::greet.parameters
println("Hello, ${p[0].name}")
}
}
另一方面,参数值无法在JVM上以反射方式获得。