Android Kotlin上限:“:Any”对Kotlin有什么影响;s泛型类型推断?
继《Android开发者的Kotlin》一书之后,我们遇到了扩展函数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
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?
因此,
相当于