为什么使用声明 – 站点差异
这不是一个Kotlin的具体问题,但我想更好地理解为什么我会使用声明站点方差(协变和逆变)。 我知道如何使用它们,我只是没有看到太多的好处,或者在哪种情况下,我应该选择一个优先于另一个,为什么我不想一直使用Use-site方差。
声明站点使客户更容易使用泛型类,因为如果创建者在最初创建时已经做出决定,则不必考虑差异。 当使用这样的泛型类时,编译器可以确定可能的差异。
//declaration-site abstract class ReadableList<out T> { abstract fun get(): T } fun workWithReadableList(strings: ReadableList<String>) { val objects: ReadableList<Any> = strings // This is OK, since T is an out-parameter, ReadableList is covariant in its type T // ... }
只需看看详细的use-site java语法。 许多人甚至不知道super
和extends
之间的差异,或者什么差异意味着什么。 Kotlin的关键字有点更具描述性,也用于其他语言。