pan*_*cuh 3 generics mvp android kotlin
我正在尝试将我的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
Run Code Online (Sandbox Code Playgroud)
并移植到Kotlin:
abstract class BaseActivity<P : BasePresenter<BaseView>> : AppCompatActivity(), BaseView
abstract class BasePresenter<V : BaseView>
interface BaseView
Run Code Online (Sandbox Code Playgroud)
当我试图使用时
class MainActivity() : MainView, BaseActivity<MainPresenter>()
Run Code Online (Sandbox Code Playgroud)
我得到"Type参数不在其范围内.预期:BasePresenter,Found MainPresenter "
在Java的 class BaseActivity各国P延伸BasePresenter<?>而科特林版本状态BasePresenter<BaseView>,这显然是不兼容的.
要解决这个问题,您可以放松BaseActivity类型参数,P如下所示:
abstract class BaseActivity<P : BasePresenter<*>>
Run Code Online (Sandbox Code Playgroud)
或者如果您希望编译器完成更多类型检查,您可以指定类型参数,view如下所示:
abstract class BaseActivity<TPresenter : BasePresenter<TView>, TView : BaseView> : AppCompatActivity(), BaseView
Run Code Online (Sandbox Code Playgroud)
然后将其用作:
class MainPresenter : BasePresenter<MainView>()
class MainActivity() : MainView, BaseActivity<MainPresenter, MainView>()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1061 次 |
| 最近记录: |