我想移至Kotlin旧Java项目,发现很有趣,无法毫不费力地将其翻译成Kotlin

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

您能给我提些建议吗?

最佳答案

一种方法是像这样使用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 { ... }
}

09-30 11:59