Kotlin 获取对class.field“u 1的访问权限,该字段将其属性名称与字符串”组合在一起;字段“uquot;及;1“;
假设我有一个数据类Kotlin 获取对class.field“u 1的访问权限,该字段将其属性名称与字符串”组合在一起;字段“uquot;及;1“;,kotlin,Kotlin,假设我有一个数据类Foo,其属性如下: field_1 field_2 .... field_10 此类的对象创建如下 val foo = Foo(1, 2,...10) 出于某些原因,我希望使用以下方式访问属性: //here is correct val fieldNumber = someFunToCalculateFieldNumber() val combinedFooField = "field_$fieldNumber" //here is wrong v
Foo
,其属性如下:
field_1
field_2
....
field_10
此类的对象创建如下
val foo = Foo(1, 2,...10)
出于某些原因,我希望使用以下方式访问属性:
//here is correct
val fieldNumber = someFunToCalculateFieldNumber()
val combinedFooField = "field_$fieldNumber"
//here is wrong
val value = foo.combinedFooField
有办法做到这一点吗?您需要使用Kotlin反射模块 发件人:
org.jetbrains.kotlin
科特林反射
1.4.0-rc
运行时
然后:
package org.example
data class Hello(val a: Int, val b: Int, val c: Int, val d: Int) {
fun getFields() = Hello::class.java.declaredFields.withIndex().map {
"${it.index},${it.value.name}"
}
}
fun main(args: Array<String>) {
val h = Hello(1,2,3,4)
for (field in h.getFields()) {
println(field)
}
}
package org.example
数据类Hello(val a:Int,val b:Int,val c:Int,val d:Int){
fun getFields()=Hello::class.java.declaredFields.withIndex().map{
${it.index},${it.value.name}
}
}
趣味主线(args:Array){
val h=你好(1,2,3,4)
for(h.getFields()中的字段){
println(字段)
}
}
这称为反射。但在这种情况下,我建议使用varargs
或单个List
属性,这样您就可以访问元素而不必诉诸反射。
package org.example
data class Hello(val a: Int, val b: Int, val c: Int, val d: Int) {
fun getFields() = Hello::class.java.declaredFields.withIndex().map {
"${it.index},${it.value.name}"
}
}
fun main(args: Array<String>) {
val h = Hello(1,2,3,4)
for (field in h.getFields()) {
println(field)
}
}