首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin上界:‘:Any`’对Kotlin的泛型推理有什么区别?

Kotlin上界:‘:Any`’对Kotlin的泛型推理有什么区别?
EN

Stack Overflow用户
提问于 2018-05-09 08:13:44
回答 2查看 1K关注 0票数 4

Kotlin for Android Developers的书中,我们看到了扩展函数

代码语言:javascript
复制
fun <T:Any> SelectQueryBuilder.parseList(parser: (Map<String,Any?>) -> T):List<T> = parseList(object:MapRowParser<T>{
    override fun parseRow(columns: Map<String, Any?>): T = parser(columns)
})

我不知道为什么:Any是必要的。

如果我把它写成fun <T> SelectQueryBuilder.parseList(...),Android会抱怨

然而,当您将:Any添加回时,该错误就会消失。

现在,就我而言,T应该暗示T:Any,尽管情况显然不是这样的。为什么会这样呢?那又有什么区别呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-09 08:22:46

现在,就我而言,T应该暗示T:Any

T意味着T:Any?,其中Any?最接近于Java的Object。使用T:Any,您指定了一个非空类型。

票数 8
EN

Stack Overflow用户

发布于 2018-05-09 08:33:23

:Any为泛型类型参数定义一个上限。正如您可以在Kotlin文档的泛型:上界章节中看到的那样,默认的上限是Any?

默认的上限(如果没有指定)是Any?

因此,<T>等同于<T: Any?>

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

https://stackoverflow.com/questions/50248546

复制
相关文章

相似问题

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