0

我是 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.valueAny? 类型。我仍然收到以下错误, 在此处输入图像描述

我也尝试过铸造,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)
4

1 回答 1

3

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

你有一个Column<*>和一个值Any。那不匹配,因为Column<*>不一样Column<Any>。The*可以是任何东西,所以它可以是 a Column<Integer>,例如,您不能将 a 设置Any为值。

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

演员阵容很糟糕,但使用它Map来存储这些更新不是类型安全的,这就是你必须为此负责的地方。

于 2019-11-28T04:22:02.240 回答