我想移至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 { ... }
}