2016-09-23 32 views
2

我試圖將我的MVP解決方案從JAVA移植到Kotlin,我對泛型有一個很大的問題。這是我的JAVA類是如何模樣:Kotlin通用邊界

public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements BaseView 

public abstract class BasePresenter<V extends BaseView> 

public interface BaseView 

並移植到科特林:

abstract class BaseActivity<P : BasePresenter<BaseView>> : AppCompatActivity(), BaseView 

abstract class BasePresenter<V : BaseView> 

interface BaseView 

,當我試圖使用

class MainActivity() : MainView, BaseActivity<MainPresenter>() 

我得到「類型參數不在其範圍之內預計:BasePresenter,Found MainPresenter

+0

你解決了這個問題嗎?在主持人我有方法attachView(視圖:V)和我有衝突與此方法,如果我嘗試下面的變種。如果你解決這個問題,請告訴我。謝謝。 –

+1

@RamanBranavitski請檢查我的回購, (https://github.com/GDGWroclaw/Toast/blob/master/app/src/main/java/com/droidsonroids/toast/common/mvp/MvpActivity.kt,如果有的話 – panbacuh

回答

6

的Javaclass BaseActivity指出P擴展BasePresenter<?>科特林版本狀態BasePresenter<BaseView>這顯然是不兼容的。

要解決,你可以放鬆BaseActivity類型參數P像這樣:

abstract class BaseActivity<P : BasePresenter<*>> 

,或者如果你想有更多的類型檢查的編譯器做,你可以指定類型參數view像這樣:

abstract class BaseActivity<TPresenter : BasePresenter<TView>, TView : BaseView> : AppCompatActivity(), BaseView 

,然後用它作爲:

class MainPresenter : BasePresenter<MainView>() 
class MainActivity() : MainView, BaseActivity<MainPresenter, MainView>() 
+0

在主持人我有方法attachView(視圖:V),我與此方法有衝突,如果我嘗試你的變體。 類型不匹配:推斷的類型是BaseMvpActivity 但T是預期的 –

+0

看看請在下面發帖 –

+0

我有同樣的問題,這是固定的任何地方? – Rafa