Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics Kotlin,使用扩展泛型的类类型定义对象_Generics_Kotlin - Fatal编程技术网

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

Generics Kotlin,使用扩展泛型的类类型定义对象,generics,kotlin,Generics,Kotlin,我已经实现了MVP,我试图在Kotlin中进行转换,但我一直使用泛型——我未能实例化扩展父presenter类的未知类型的对象。我为演示者提供了界面: interface BasePresenter { fun attachView(view: View) fun detachView(view: View) ...} 还有一些片段的基本代码,这些代码将包含presenter。在java中,它的工作方式如下: abstract public class BaseFragment

我已经实现了MVP,我试图在Kotlin中进行转换,但我一直使用泛型——我未能实例化扩展父presenter类的未知类型的对象。我为演示者提供了界面:

interface BasePresenter {
    fun attachView(view: View)
    fun detachView(view: View)
...}
还有一些片段的基本代码,这些代码将包含presenter。在java中,它的工作方式如下:

abstract public class BaseFragmentWithPresenter<P extends BasePresenter> extends BaseFragment {
    @Inject
    protected P presenter;
如何在科特林做到这一点?我阅读了有关输入输出技术的内容,但仍然失败。

尝试以下方法:

abstract class BaseFragmentWithPresenter<P : BasePresenter> : BaseFragment() {
    protected abstract val presenter: P
}
抽象类BaseFragmentWithPresenter:BaseFragment(){
受保护的抽象val呈现者:P
}
试试这个:

abstract class BaseFragmentWithPresenter<P : BasePresenter> : BaseFragment() {
    protected abstract val presenter: P
}
抽象类BaseFragmentWithPresenter:BaseFragment(){
受保护的抽象val呈现者:P
}

我发现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)
}
抽象类BaseFragmentWithPresenter:BaseFragment(){
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
presenter.attachView(此为V)
}

我发现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)
}
抽象类BaseFragmentWithPresenter:BaseFragment(){
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
presenter.attachView(此为V)
}

您能否澄清问题具体出在哪里?代码应该是这样的:
抽象类BaseFragmentWithPresenter:BaseFragment(){lateinit var p:p}
您能否澄清问题具体出在哪里?代码应该是这样的:
抽象类BaseFragmentWithPresenter:BaseFragment(){lateinit var p:p}