问题描述
data class Worker(val id: Int,val name:String,val gender :String,val age :Int,val tel:String,val email:String)
和工人名单
List<Worker> = listof(workerA,workerB)
updateWorkerData(1,age,28)
//'type' refer to name,gender,age ..
//'value' refer AA,Female,27 ..
fun updateWorkerData(id: Int,type: Any,value: Any) {
val workers = getlistofWorker()
workers.forEach {
if (it.id == id) {
//here is where I stuck
}
}
}
我在如何将类型引用到数据类Worker中的值上感到困惑。需要一些有关如何更新工作人员数据的指南。谢谢。
解决方法
您的数据类应具有可变属性,以便可以对其进行更改:
data class Worker(val id: Int,var name: String,var gender: String,var age: Int,var tel: String,var email: String)
然后,您可以将KProperty传递给可以更改该属性的函数:
fun <T> updateWorkerData(id: Int,property: KMutableProperty1<Worker,T>,value: T) {
val workers = getListOfWorker()
workers.forEach {
if (it.id == id) {
property.set(it,value)
}
}
}
updateWorkerData(1,Worker::age,28)
,
Animesh的答案是正确的,我只想指出,使用Map
个Workers(其中的键是worker ID)可能更简单,而直接编辑Workers而不是做得很聪明(而且很难理解)带有反思的事物:
val workers: Map<Int,Worker> = listOf(
Worker(1,"a",1,"a"),Worker(2,"b",2,"b"),Worker(3,"c",3,"c"),).map { it.id to it }.toMap()
// Worker 1 changes name
workers.getValue(1).name = "Slartibartfast"
// Worker 2 gets older
workers.getValue(2).age += 1
// Worker 3 changes email
workers.getValue(3).email = "[email protected]"