为什么 类 的转换在 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")
        }
    }