generics - 泛型类型如何适应类型层次结构?

标签 generics kotlin types

Kotlin 有一个完整而优雅的类型层次结构 - 如果这是正确的词,因为它是一个有向无环图而不是树 - 在 http://www.natpryce.com/articles/000818.html 中用图表进行了描述和 https://blog.kotlin-academy.com/the-beauty-of-kotlin-typing-system-7a2804fe6cf0

我不清楚泛型如何适应这一切。

List这样的泛型类型如何和Map ,及其特化,如 List<Int>Map<String, Int>适合类型层次结构吗?

最佳答案

ListMap不是类型;他们是类(class)。要形成类型,您需要指定必要的类型参数,例如List<Int> (或 type projection 例如 List<*> )。

(这与Java不同,Java允许 raw types ,主要是为了向后兼容。)

类型关系取决于 variance :例如List<Int>List<Number> 的子类型,因为它的类型参数是协变的;但是MutableList<Int>是不变的,与 MutableList<Number> 没有关系(除了它们都是 Any 的子类型)。

这为类型层次结构添加了额外的维度,使其比您可能看到的简单图表更加复杂。但原理很简单,所以通常不会被画出来。

更多详细信息,一如既往,请参阅 Kotlin documentation .

关于generics - 泛型类型如何适应类型层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61999717/

相关文章:

android - Kotlin : Casting an object to Generic class

swift - 为两种不同类型的数据管理单个变量

java - 重载采用通用类型的方法会导致模棱两可的方法调用编译错误

kotlin - 接收表单参数到 Ktor 服务器

types - Rust 有 C 的 typedef 的等价物吗?

c# - 该类型必须是引用类型才能将其用作泛型类型或方法中的参数 'T'

spring - @Valid @CustomValidator 在 Spring @Service 中

c - 如何使两个在其他方面相同的指针类型不兼容

python - 如何在Python中创建一个子字典来覆盖 super 字典

android - 如何访问工具:来自Kotlin/Java类的示例数据?