Kotlin通用界限

时间:2016-09-23 08:15:43

标签: android generics kotlin mvp

我正在尝试将我的MVP解决方案从JAVA移植到Kotlin,我对泛型有很大的问题。这就是我的JAVA类的样子:

public abstract class BaseActivity<P extends BasePresenter> extends AppCompatActivity implements BaseView 

public abstract class BasePresenter<V extends BaseView>

public interface BaseView 

移植到科特林:

abstract class BaseActivity<P : BasePresenter<BaseView>> : AppCompatActivity(), BaseView 

abstract class BasePresenter<V : BaseView> 

interface BaseView

当我尝试使用

class MainActivity() : MainView, BaseActivity<MainPresenter>() 

我收到“Type参数不在其范围内。预期: BasePresenter 找到MainPresenter

1 个答案:

答案 0 :(得分:7)

Java class BaseActivity声明P扩展BasePresenter<?> Kotlin 版本声明BasePresenter<BaseView>显然是BaseActivity不兼容。

要解决此问题,您可以放宽P类型参数abstract class BaseActivity<P : BasePresenter<*>> ,如下所示:

view

或者如果您希望编译器完成更多类型检查,您可以为abstract class BaseActivity<TPresenter : BasePresenter<TView>, TView : BaseView> : AppCompatActivity(), BaseView 指定类型参数,如下所示:

class MainPresenter : BasePresenter<MainView>()
class MainActivity() : MainView, BaseActivity<MainPresenter, MainView>()

然后将其用作:

div to 1em