android - Kotlin - 如何从数据类列表中更新特定值
问题描述
我有一个工人的数据类,
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)
我想写一个函数来更新 Worker 的数据,例如:
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 中的值上。需要一些有关如何更新 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)
推荐阅读
- c# - WPF 应用程序在 Windows Server 2008 上崩溃
- javascript - JavaScript 代码中的函数参数或无参数
- ios - [iOS]如何使用私有IP地址的NSURLConnection?
- python-3.x - Pyinstaller 没有在 Mac 包中正确包含 numpy
- azure - Azure Kubernetes 服务标记未传播到基础资源
- javascript - 在执行循环为真时允许单击按钮
- c# - SignalR 应用程序启动,在 http 上运行,但不在 https 上:意外关闭的连接
- python - 从python调用powershell脚本(在网络驱动器上)?
- java - 如何使用带有微调器的 if else 语句?
- python - 从具有匹配值的两个字典列表创建一个字典