Kotlin - <T> 与 <T : Any>

ser*_*0ne 13 kotlin

在 Kotlin 中有一些情况,编译器会抱怨定义为<T>和期望的泛型类型参数<T : Any>。有什么不同?

Ada*_*old 24

不同的是,一个平原<T>意味着它可以null。(由 表示Any?)。使用<T: Any>将限制T为不可为空的类型。

所以区别在于它<T>是一个隐式的<T: Any?>.

  • 它与“Object”相同,因为“Object”对应于“Any?”而不是“Any”。与 Java 不同,“Kotlin 支持可为空类型”这一说法并不正确。它支持的是_non-nullable_类型。 (2认同)
  • 我还要补充一点,说“&lt;T&gt;”意味着它可以为空是不正确的。这意味着它可以为空或不可为空。 (2认同)
  • 实际上,“&lt;T&gt;”与“&lt;T : Any?&gt;”相同。`Any` 是可空类型 `Any?` 的不可空子类型,并且 `&lt;T : Any&gt;` 将 `T` 限制为不可空类型。根据上下文,“Any”和“Any?”都可以映射到“java.lang.Object”;Kotlin 的类型系统比 Java 的更细粒度。 (2认同)