Kotlin 可空任何

Kotlin Nullable Any

我是 Kotlin 新手。我面临以下问题。我有这样的功能,

fun updateAfterFind(updateColumn:Map<Column<*>, Any?>): Boolean{
    ExposedUser.update( {ExposedUser.id eq 123} ){
        for (column in updateColumn){
            it[column.key] = column.value
        }
    }
    return true;
}

column.value 的类型是 Any?。我仍然收到以下错误,

我也尝试过铸造,column.name as Any?。但这并没有帮助。

完成后 gradle build 我得到以下错误,

Type inference failed: Cannot infer type parameter S in fun <S> set(column: Column<S>, value: S?): Unit
None of the following substitutions
(Column<CapturedTypeConstructor(*)>,CapturedTypeConstructor(*)?)
(Column<Any>,Any?)
can be applied to
(Column<*>,Any)

<S> UpdateStatement.set(Column<S>,S?) 的签名表明列的类型参数必须与值类型相匹配。

您有一个 Column<*> 和一个值 Any。这不匹配,因为 Column<*>Column<Any> 不同。 * 可以是任何东西,因此它可以是 Column<Integer>,例如,您不能将 Any 设置为值。

如果您知道这些类型确实兼容,那么您可以通过说it[column.key as Column<Any>] = column.value

来覆盖检查

转换很糟糕,但是使用 Map 来存储这些更新不是类型安全的,这是您必须对此负责的地方。