首页 > 解决方案 > 为什么类的转换在 kotlin 中不起作用?

问题描述

我将这样的列表发送给函数:listOf(IncomeVerificationType::class, IncomeType::class),但函数仅返回带有 的地图"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
    }

标签: kotlincasting

解决方案


因为IncomeType::class不是. _ _ 的类型是。它引用类本身,而不是类的实例。IncomeType
IncomeType::classKClass<IncomeType>

要在 when 语句中正确匹配这些类对象,您可以使用常规相等检查而不是“is”检查:

    val list = listOf(IncomeVerificationType::class, IncomeType::class)
    list.forEach {
        when (it) {
           IncomeVerificationType::class -> println("IncomeVerificationType")
           IncomeType::class -> println("IncomeType")
        }
    }

推荐阅读