我是科特林的新手。我面临以下问题。我有这样的功能,
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的类型是什么?不过,我还是得到了以下错误,

我也试过演员,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)发布于 2019-11-28 04:22:02
<S> UpdateStatement.set(Column<S>,S?)的签名表明,列的类型参数必须与值类型匹配。
您有一个Column<*>和一个值Any。这是不匹配的,因为Column<*>与Column<Any>不一样。*可以是任何东西,所以它可以是Column<Integer>,例如,您不能将Any设置为值。
如果您知道这些类型确实是兼容的,那么可以使用it[column.key as Column<Any>] = column.value来覆盖检查。
这个转换是很恶心的,但是使用那个Map来存储这些更新并不是类型安全的,这就是你必须为此负责的地方。
https://stackoverflow.com/questions/59081463
复制相似问题