Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 获取对class.field“u 1的访问权限,该字段将其属性名称与字符串”组合在一起;字段“uquot;及;1“;_Kotlin - Fatal编程技术网

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)
    }
}