为什么 类 的转换在 kotlin 中不起作用?
Why does the casting of classes not work in kotlin?
我将这样的列表发送到函数:listOf(IncomeVerificationType::class, IncomeType::class)
,但函数 returns 地图仅包含 "id"
。为什么 is
不起作用?我做错了什么?
函数:
fun sendUpdatedEvent(model: Model, updatedFields: List<Any>): Map<String, Any> {
val fieldToValueMap = mapOf("id" to model.identity.id)
updatedFields.forEach {
when (it) {
is IncomeVerificationType -> fieldToValueMap.plus("incomeVerification" to model.incomeVerification)
is IncomeType -> fieldToValueMap.plus("incomeTypeId" to model.incomeTypeId)
}
}
return fieldToValueMap
}
因为 IncomeType::class
是 不是 IncomeType
的实例。
IncomeType::class
的类型是 KClass<IncomeType>
。它引用 class 本身,而不是 class.
的实例
要在 when 语句中正确匹配那些 class 对象,您可以使用常规相等性检查而不是 'is' 检查:
val list = listOf(IncomeVerificationType::class, IncomeType::class)
list.forEach {
when (it) {
IncomeVerificationType::class -> println("IncomeVerificationType")
IncomeType::class -> println("IncomeType")
}
}
我将这样的列表发送到函数:listOf(IncomeVerificationType::class, IncomeType::class)
,但函数 returns 地图仅包含 "id"
。为什么 is
不起作用?我做错了什么?
函数:
fun sendUpdatedEvent(model: Model, updatedFields: List<Any>): Map<String, Any> {
val fieldToValueMap = mapOf("id" to model.identity.id)
updatedFields.forEach {
when (it) {
is IncomeVerificationType -> fieldToValueMap.plus("incomeVerification" to model.incomeVerification)
is IncomeType -> fieldToValueMap.plus("incomeTypeId" to model.incomeTypeId)
}
}
return fieldToValueMap
}
因为 IncomeType::class
是 不是 IncomeType
的实例。
IncomeType::class
的类型是 KClass<IncomeType>
。它引用 class 本身,而不是 class.
要在 when 语句中正确匹配那些 class 对象,您可以使用常规相等性检查而不是 'is' 检查:
val list = listOf(IncomeVerificationType::class, IncomeType::class)
list.forEach {
when (it) {
IncomeVerificationType::class -> println("IncomeVerificationType")
IncomeType::class -> println("IncomeType")
}
}