2017-11-21 14 views
0

を解決:それKotlin:同じ記事を読んだ後、私はまだジェネリック医薬品の問題を解決することはできません一般的な継承

interface BaseView : MvpView 

そして確かBasePresenter

用のため

abstract class BaseActivity : MvpAppCompatActivity(), BaseView { 
    abstract fun getPresenter():BasePresenter<BaseView> 
} 

BaseViewインタフェース:

を私はBaseActivityを持っています

open class BasePresenter<T : BaseView> : MvpPresenter<T>() 

それから私はBaseConnectionView

interface BaseConnectionView : BaseView 

そしてBaseConnectionPresenter作成

class BaseConnectionPresenter<T : BaseConnectionView> : BasePresenter<T>() 

だから私は、作成時にBaseConnectionActivity

abstract class BaseConnectionActivity : BaseActivity(),BaseConnectionView { 
    override abstract fun getPresenter(): BaseConnectionPresenter<BaseConnectionView> 
} 

私が持っているエラー:

Return type is BaseConnectionPresenter<BaseConnectionView>, 
which is not a subtype of overridden 
public abstract fun getPresenter():BasePresenter<BaseView> 

富栄t サブタイプです!

どうすればこの問題を解決できますか?

+0

「しかし、それはサブタイプです!それは、https://kotlinlang.org/docs/reference/generics.htmlが理由を説明していない。 –

答えて

0

ソリューションは、私が使用スター・予測

だからBaseActivityに、私は

abstract fun getPresenter():BasePresenter<*> 

abstract fun getPresenter():BasePresenter<BaseView> 

を置き換えそして私場合は思ったより簡単でした

のように新しいプレゼンターでオーバーライドできます
override abstract fun getPresenter(): BaseConnectionPresenter<*> 
1

BaseConnectionPresenterは、BasePresenter<T>のサブタイプであり、T: BaseConnectionViewである。関数getPresenterBasePresenter<BaseView>を返します。 BasePresenter<T>BasePresenter<BaseView>であることが保証されていないため、問題があります。以下の修正を:

class BaseConnectionPresenter<T : BaseConnectionView> : BasePresenter<BaseView>() 
+0

その場合、私はクラスのようなものがあると同じエラーが発生します:RealPresenter:BaseConnectionPresenter () – DEADMC

+0

また、BaseViewをBasePresenterに渡すと、BaseConnectionViewからMoxyでviewStateを正しく使用することができません – DEADMC

関連する問題