使用kotlin.reflect获取数组元素对应变量名失败,求助解决方法
问题原因与解决方法
你遇到的问题核心在于两点:
- 数组
all里存储的是变量a、b、c的值("aa"、"bb"、"cc"),而非变量本身的引用,遍历拿到的i只是字符串值,根本关联不到原变量。 ::i试图引用循环参数i,但Kotlin不支持对循环参数使用这种属性引用语法,所以直接报错。
解决方案1:用Map关联变量名与值
如果不需要反射,最简单的方式是直接用Map存储变量名和对应的值,遍历的时候同时拿到名称和值:
val a = "aa" val b = "bb" val c = "cc" val all = mapOf( "a" to a, "b" to b, "c" to c ) for ((name, value) in all) { println("$name = $value") }
解决方案2:用属性引用数组存储变量引用
如果一定要用反射相关的方式,可以直接把变量的属性引用存入数组,这样遍历的时候就能直接获取变量名和对应的值:
val a = "aa" val b = "bb" val c = "cc" val all = arrayOf(::a, ::b, ::c) for (prop in all) { println("${prop.name} = ${prop.get()}") }
这里::a是变量a的属性引用,类型为KProperty0<String>,通过prop.name可以拿到变量名,prop.get()可以获取变量当前的值。
内容的提问来源于stack exchange,提问作者cuttlefish
相关产品推荐
相关产品推荐

