为什么使用声明站点差异



这不是科特林的特定问题,但我想更好地理解为什么我会使用声明站点差异(协变和逆转(。我了解如何使用它们,我只是看不到很多好处,或者在这种情况下,我应该选择彼此的好处,以及为什么我不想一直使用用途差异。

声明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
    // ...
}

只能查看详细的用途Java语法。许多人甚至都不知道superextends之间的区别或差异意味着什么。Kotlin的关键字inout更具描述性,也用于其他语言。

相关内容

  • 没有找到相关文章

最新更新