简体   繁体   English

如何将实现通用接口的通用 class 传递给另一个通用 class Kotlin

[英]how to pass generic class implementing generic interface to another generic class Kotlin

Hi I am new to programming and trying to implement MVP pattern by passing generic Presenter class LoginPresenter to Generic Model Class LoginUserModel but getting type mismatch error.嗨,我是编程新手并尝试通过将通用 Presenter class LoginPresenter给 Generic Model Class LoginUserModel来实现 MVP 模式,但出现类型不匹配错误。 on loginUserModel.onAttach(this) and I am unable to figure out how to pass pass generic interface to another class.loginUserModel.onAttach(this)上,我无法弄清楚如何将通用接口传递给另一个 class。

Login Presenter登录演示者

class LoginPresenter<V : ILoginView>: BasePresenter<V>(), ILoginPresenter<V> {
    lateinit var loginUserModel: LoginUserModel<ILoginPresenter<ILoginView>>
    lateinit var iLoginPresenter: ILoginPresenter<V>
    .........
    .........
    override fun setupModel() {
           iLoginPresenter = this
           loginUserModel = LoginUserModel()
           // here i am getting error
           /**
             Type mismatch.
             Required:
             ILoginPresenter<ILoginView>
             Found:
             LoginPresenter<V>
           */
           loginUserModel.onAttach(this)
    }

}

Login Model登录 Model

class LoginUserModel<P: ILoginPresenter<ILoginView>> : LoginModelContract<P> {
     var iLoginPresenter : P? = null
     override fun onAttach(ILoginPresenter: P) {
        iLoginPresenter = ILoginPresenter
    }
}

LoginModelContract登录模型合约

public interface LoginModelContract<P: ILoginPresenter<ILoginView>> {
  fun getUsersList(
    userName:String,
    guid: String
  )

  fun onAttach(ILoginPresenter: P)
  fun onDetatch()
  fun getPresenter(): P?

}

You can use two generic statements like below您可以使用如下两个通用语句

class LoginUserModel<V: ILoginView, P : ILoginPresenter<V>> : LoginModelContract<V,P> {

    var iLoginPresenter : P? = null
    
    override fun onAttach(ILoginPresenter: P) {
        iLoginPresenter = ILoginPresenter
    }
}

interface ILoginView{

}

interface ILoginPresenter<T>{
    fun setupModel()
}

class LoginPresenter<V : ILoginView>:  ILoginPresenter<V> {
    lateinit var loginUserModel: LoginUserModel<V,ILoginPresenter<V>>
    lateinit var iLoginPresenter: ILoginPresenter<V>

    override fun setupModel() {
        iLoginPresenter = this
        loginUserModel = LoginUserModel()
        loginUserModel.onAttach(this)
    }

}

public interface LoginModelContract<V: ILoginView, P : ILoginPresenter<V>> {
    fun onAttach(ILoginPresenter: P)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM