首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Kotlin Nullable任何

Kotlin Nullable任何
EN

Stack Overflow用户
提问于 2019-11-28 03:49:23
回答 1查看 273关注 0票数 0

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

代码语言:javascript
运行
复制
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后,我得到以下错误:

代码语言:javascript
运行
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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来存储这些更新并不是类型安全的,这就是你必须为此负责的地方。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59081463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档