Android Kotlin上限:“:Any”对Kotlin有什么影响;s泛型类型推断?

Android Kotlin上限:“:Any”对Kotlin有什么影响;s泛型类型推断?,android,generics,types,kotlin,type-inference,Android,Generics,Types,Kotlin,Type Inference,继《Android开发者的Kotlin》一书之后,我们遇到了扩展函数 fun <T:Any> SelectQueryBuilder.parseList(parser: (Map<String,Any?>) -> T):List<T> = parseList(object:MapRowParser<T>{ override fun parseRow(columns: Map<String, Any?>): T = parse

继《Android开发者的Kotlin》一书之后,我们遇到了扩展函数

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)
})
fun SelectQueryBuilder.parseList(解析器:(Map)->T):List=parseList(对象:MapRowParser{
重写语法分析器行(列:Map):T=parser(列)
})
我不知道为什么
:Any
是必需的

如果我把它写成
fun SelectQueryBuilder.parseList(…)
,Android Studio会抱怨

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

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

现在,就我而言,
T
应该意味着
T:Any


T
表示
T:Any?
,其中
Any?
与Java的
对象最接近。使用
T:Any
指定了不可为空的类型。

:Any
为泛型类型参数定义了一个上限。正如您在Kotlin文档的章节中所读到的,默认上限为
Any?

默认上限(如果未指定)为
Any?

因此,
相当于