每个数据类对象都有一个组件,用于每个属性,如component1,component2等.我想知道Kotlin中是否有任何方法可以迭代类的每个组件.说我上课了:
class User(age:Int, name:String)
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
for(component in aUserObject){
//do some stuff with age or name
}
Run Code Online (Sandbox Code Playgroud)
?
yol*_*ole 37
首先,这些componentN属性仅适用于数据类,而不适用于每个对象.
没有专门用于迭代组件的API,但您可以使用Kotlin反射来迭代任何类的属性:
class User(val age: Int, val name: String)
fun main(args: Array<String>) {
val user = User(25, "Bob")
for (prop in User::class.memberProperties) {
println("${prop.name} = ${prop.get(user)}")
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用“按映射”内置委托的属性委托。它对于一些简单的统计类非常有用。
class DbUsingStat {
private val map = mutableMapOf(
"removed" to 0,
"updated" to 0,
"skipped" to 0
)
var removed by map
var updated by map
var skipped by map
fun asMap() : Map<String, Int> = map.toMap()
}
...
...
val someStatistic = DbUsingStat().apply {
skipped = 5
removed = 10
updated = 1505
}
for((k, v) in someStatistic.asMap())
println("$k: $v")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10602 次 |
| 最近记录: |