2016-12-14 4 views
4

私はKotlin古いJavaプロジェクトに移動したい、と面白い発見に、のJava Kotlinのジェネリクス翻訳

public interface BaseJView<P extends BaseJPresenter> { 
    P createPresenter(); 
} 
public interface BaseJPresenter<V extends BaseJView> { 
    void bindView(V view); 
} 

あなたはアドバイスを与えることができ、痛みなしKotlinにこれを翻訳することはできません、私はこれをどのようにachiveことができますか?

答えて

4

一つの方法は、そのようrecursive type definitionを採用するようになります:

interface BaseJView<TSelf : BaseJView<TSelf, P>, P : BaseJPresenter<P, TSelf>> { 
    fun createPresenter(): P 
} 

interface BaseJPresenter<TSelf : BaseJPresenter<TSelf, V>, V : BaseJView<V, TSelf>> { 
    fun bindView(view: V) 
} 

あなたが、その後持つことができます。

class Presenter : BaseJPresenter<Presenter, View> { 
    override fun bindView(view: View) { ... } 
} 
class View : BaseJView<View, Presenter> { 
    override fun createPresenter(): Presenter { ... } 
} 
+0

おかげで、それが動作するようになりました –