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
来存储这些更新不是类型安全的,这是您必须对此负责的地方。
我是 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
来存储这些更新不是类型安全的,这是您必须对此负责的地方。