我已经定义了以下具有两种泛型类型的基类,并使用了两层深度(因为缺少更好的短语)。这是我的用例。
abstract class BasePresenter<out M, out V> {
var model: M? = null
var view: WeakReference<V>? = null
fun setM(model: M?): Unit {
this.model = model
if (setupDone()) {
updateView()
}
}
fun bindView(view: V) {
this.view = WeakReference(view)
}
fun unbindView() {
this.view = null
}
abstract fun updateView()
fun view(): V? {
return if (view == null) null else view?.get()
}
fun setupDone(): Boolean {
return view() != null && model != null
}
}
我正在使用它来扩展它
open class VenueListPresenter: BasePresenter<Venue, VenueView>() {...}
正如预期的那样工作正常,但是当我尝试VenuListPresenter
在不同的类中使用作为类型参数时遇到了问题。
open class VenuesViewHolder(itemView: View): MvpViewHolder<VenueListPresenter>(itemView) {
这给了我一个错误,指出预期的参数MvpViewHolder
是 BasePresenter,并且找到的是VenueListPresenter
. 我VenueListPresenter
扩展了BasePresenter<Venue, VenueView>
whereVenue
并且VenueView
是类型Any?
,因为默认情况下它们扩展它。那么为什么它不起作用呢?
MvpViewHolder 是这样定义的
abstract class MvpViewHolder<P>(itemView: View) : RecyclerView.ViewHolder(itemView) where P : BasePresenter<Any?, Any?>