Java转Kotlin MVP架构的一点小问题

本文探讨了Kotlin与Java在MVP模式实现上的不同之处,并通过具体的代码示例展示了如何在Kotlin中正确实现MVP模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我的女神是巨蟹座的配图一张(国际惯例)

Kotlin刚出来一窝蜂的都去搞现在好像消停多了文章也没有那么密集啦,但是还要安利一波Kotlin还是有必要学习一下的, JakeWharton不也去了Google专搞Kotlin。 不了解的可以看看这个juejin.im/post/591dd9… 一般Kotlin项目都是在已有的Java项目基础上进行转变,但是有的时候也会出现一些问题的。 java 中的MVP:

基类Presenter
public interface IPresenter<T extends IView> {
    void attachView(T view);

    void detachView();
}
基类View
public interface IView {
    void showMsg(String msg);
}

public class BasePresenter<T extends IView> implements IPresenter<T> {}

基类Activity
public abstract class BaseActivity<T extends IPresenter> extends RxAppCompatActivity implements IView {
    
     @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (mPresenter != null) {
            mPresenter.attachView(this);
        }
    }
}

复制代码

Kotlin中的MVP: 其实没有多大差别

基类Presenter
interface IPresenter<in V : IView> {

    fun attachView(mRootView: V)

    fun detachView()

}
基类View
interface IView {
    fun showMsg()
}

abstract class BasePresenter<T : IView> : IPresenter<T> {}
复制代码

问题就出在BaseActivity的转化过程中 正常直接转

abstract class BaseActivity<T : IPresenter> : AppCompatActivity(), IView {}
这样存在一个问题就是在IPresenter处会提示缺少泛型当初的解决办法简单粗暴直接
abstract class BaseActivity<T : IPresenter<*>> : AppCompatActivity(), IView {}
但是这样仍然会有个问题就是在添加view的时候会出现
mPresenter?.attachView(this)会报错
Type mismatch.
Required:
Nothing
Found:
BaseActivity<T>
当时不理解啊 怎么会有这个问题 问了问群里的人 也没回答,百度也没找到答案,最后还是Google在Stack Overflow上找到了答案 吐槽一下 百度是真的垃圾 哈哈哈

abstract class BaseActivity<in V : IView, T : IPresenter<V>> : AppCompatActivity(), IView {}
增加一个view泛型添加view时 mPresenter?.attachView(this as V)这样就可以啦 当然在用的时候也会有一点跟java不一样的小变化

class MainActivity : BaseActivity<MainContract.View, MainPresenter>(), MainContract.View {}
这样就可以愉快地玩耍啦。
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值