Kotlin泛型中类型参数T与Any的区别是什么?
两段Kotlin泛型类的差异分析
这两段代码看似运行逻辑相似,但本质上存在关键区别:
代码1里的
<T>是标准的泛型类型参数占位符,T是通用变量名,代表创建类实例时传入的任意类型。比如写SomeClass<Int>(100),param的类型就是Int;写SomeClass<String>("hello"),param的类型就是String。代码2里的
<Any>只是泛型参数的自定义名称,它和Kotlin标准库中所有类的根类kotlin.Any没有任何关联。这里的Any等价于代码1里的T,只是换了个名字而已。比如创建SomeClass<Double>(3.14)时,param的类型还是Double,而非kotlin.Any。
如果想让泛型参数限定为kotlin.Any(仅允许传入非空任意类型),正确写法应为class SomeClass<T : Any>(var param: T),这和代码2的逻辑完全不同。
内容的提问来源于stack exchange,提问作者Андрей Баранов
相关产品推荐
相关产品推荐

