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