Kotlin 泛型边界

Kotlin generic bounds

我正在尝试将我的 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 

并移植到 Kotlin:

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

abstract class BasePresenter<V : BaseView> 

interface BaseView

当我尝试使用

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

我得到 "Type argument is not within its bounds. Expected: BasePresenter, Found MainPresenter"

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>()