gpt4 book ai didi

android - kotlin 继承是如何工作的?以及如何使用 "*"、 "in"和 "out"

转载 作者:行者123 更新时间:2023-11-29 23:49:59 26 4
gpt4 key购买 nike

我有下面的

open class Model

class WorkOrder : Model()

//An interface

interface ViewInterface<T : Model> {
fun notifyDataSuccessful(model: T?, models:ArrayList<T>?)
}

class WorkOrderSystemImpl(val viewInterface: ViewInterface<Model>) {

fun doSomething() {
val workOrders: ArrayList<WorkOrder> = ArrayList()
//the below line complains of type mismatch
viewInterface.notifyDataSuccessful(workOrders)
}

}

它提示 type-mismatch 这对我来说很奇怪,因为 WorkOrder 是 Model 的子类型,我希望它解析为相同的类型。

最佳答案

关于 Genericsinvariant & covariant ,请参阅 Kotlin 文档 here .

简而言之,你只需记住:

Consumer in, Producer out!

哪个Consumer & ProducerList 确定的观点,那意味着你应该考虑你的角色List , 是 ConsumerProducer ?在你的例子中,models:ArrayList<T>?Producer , 因为它将被 ViewInterface 的实现使用, 所以你应该定义 ViewInterface像这样:

interface ViewInterface<T: Model> {
fun notifyDataSuccessful(model: T?, models: ArrayList<out T>?)
}

关于android - kotlin 继承是如何工作的?以及如何使用 "*"、 "in"和 "out",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50964353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com