2016-12-14 3 views
4

Je veux passer à projet Kotlin vieux Java, et trouvé intéressant, ne peut pas traduire cela Kotlin sans douleurJava génériques Kotlin traduction

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

Pouvez-vous donner des conseils, comment je peux y parvenez?

Répondre

4

Un moyen serait d'employer recursive type definition comme ceci:

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) 
} 

Vous pouvez alors:

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

merci, il travaille maintenant –