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



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

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

ListMap这样的泛型类型,以及像List<Int>Map<String, Int>这样的特化如何适应类型层次结构?

ListMap不是类型;它们是类。 要形成类型,您需要指定必要的类型参数,例如List<Int>(或类型投影,如List<*>(。

(这与Java不同,Java允许原始类型,主要是为了向后兼容。

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

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

与以往一样,Kotlin 文档中的更多详细信息。

最新更新