2017-04-22 59 views
3

所以我有一個像這樣的BasePresenter類。 BaseMvpView是一個接口Kotlin - 聲明一個通用類,其類型參數是通用的

open class BaseMvpPresenter<View : BaseMvpView> { 
} 

我想創建一個BaseMvpActivity類,這是參數化的,象這樣一個BaseMvpPresenter:

abstract class BaseMvpActivity<T : BaseMvpPresenter> : BaseActivity(), BaseMvpView { 
} 

,但我得到了以下錯誤:

One type argument expected for class BaseMvpPresenter<View: BaseMvpView> 

如何我是否正確地聲明瞭這一點?我希望能夠像這樣使用BaseMvpActivity:

abstract class BaseMvpActivity<T : BaseMvpPresenter<U>, U : BaseMvpView> : BaseActivity(), BaseMvpView { 

    abstract var presenter: T 

    override fun onCreate(savedInstanceState: Bundle?) { 
     super.onCreate(savedInstanceState) 
     presenter.onViewCreated(this) 
    } 

    override fun onDestroy() { 
     presenter.onViewDestroyed() 
     super.onDestroy() 
    } 
} 

回答

4

您需要將參數傳遞給BaseMVPPresenter。您可以按如下

abstract class BaseMvpActivity<V: BaseMvpView, T : BaseMvpPresenter<V>> : BaseActivity(), BaseMvpView { 
} 

第二個參數添加到您的抽象類,所以可以說你要創建一個視圖來顯示的職位,那麼你會做這樣的事情:

class Activity : BaseMVPActivity<PostsView, PostPresenter<PostView>() { 
    //Here comes your code 
} 

希望這有助於:)

相關問題