Kotlin,使用扩展通用的类类型定义对象

时间:2019-05-25 20:59:33

标签: generics kotlin

我已经实现了尝试在Kotlin中进行转换的MVP,但是我坚持使用泛型-我无法实例化具有扩展父演示者类的未知类型的对象。我有演示者界面:

interface BasePresenter {
    fun attachView(view: View)
    fun detachView(view: View)
...}

以及一些带有演示者的片段的基本代码。在Java中,它是这样工作的:

abstract public class BaseFragmentWithPresenter<P extends BasePresenter> extends BaseFragment {
    @Inject
    protected P presenter;

如您所见,在这个父类中,我使用Dagger 2进行演示者注入,并且在这里还预定义了一些逻辑:

public void onViewCreated(...) {
    super.onViewCreated(view, savedInstanceState);
    presenter.attachView(this);
}

如何在Kotlin中做到这一点?我了解了进出技术,但仍然失败。

2 个答案:

答案 0 :(得分:0)

尝试一下:

abstract class BaseFragmentWithPresenter<P : BasePresenter> : BaseFragment() {
    protected abstract val presenter: P
}

答案 1 :(得分:0)

我发现Kotlin使用泛型而不是Java的工作要繁重得多。 我遇到了这个解决方案:

abstract class BaseFragmentWithPresenter<V : BaseView, P : BasePresenter<V>> : BaseFragment() {

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    presenter.attachView(this as V)
}