我有以下
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)
}
}
它抱怨类型不匹配,这对我来说很奇怪,因为WorkOrder是Model的子类型,我希望它能解析为相同类型。
答案 0 :(得分:1)
关于Generics
的{{1}}和invariant
,请参阅Kotlin文档here。
简而言之,您只需记住:
消费者进入,生产者退出!
covariant
和Consumer
是从Producer
的角度确定的,这意味着您应该考虑自己List
的角色,是{{ 1}}还是List
?在您的情况下,Consumer
是Producer
,因为它将由models:ArrayList<T>?
的实现使用,因此您应像这样定义Producer
:
ViewInterface