美文网首页
Java中泛型转Kotlin报错

Java中泛型转Kotlin报错

作者: 码个蛋 | 来源:发表于2022-12-04 19:25 被阅读0次

    在使用Kotlin重构原来的Java项目时,Base类中Java的泛型,转Kotlin竟然报错了,下面看一段伪代码

    //Java版本的Base接口如下:
    //Presenter层抽象接口
    public interface IPresenter <V>{}
    public abstract class BasePresenter<V extends BaseView<?>> implements IPresenter<V> {
        //view引用
        V view;
    }
    
    public interface IView <P>{}
    public abstract class BaseView<P extends BasePresenter<?>> implements IView<P>{
        //presenter引用
        P presenter;
    }
    

    这个代码在Java中 没有任何问题,但是转Kotlin后,出现了意想不到的报错。

    interface IPresenter<V> {}
    abstract class BasePresenter<V : BaseView<*>> : IPresenter<V> {
        //View引用
        lateinit var view : V
    }
    
    interface IView<P> {}
    abstract class BaseView<P : BasePresenter<*>> : IView<P> {
        //presenter引用
        lateinit var presenter : P
    }
    

    报错截图如下:


    泛型2.png 泛型1.png

    错误大致意识是:类型不对,这。。。简直离谱。
    为什么Java可以,转Kotlin居然报错了。尝试了很多种方案以后:
    终于功夫不负有心人。给点耐心,终于解决了:代码如下:

    interface IPresenter<V> {}
    abstract class BasePresenter<P : BasePresenter<P,V>,V : BaseView<V,P>> : IPresenter<V> {
        //view引用
        lateinit var view : V
    }
    
    interface IView<P> {}
    abstract class BaseView<V: BaseView<V,P> ,P : BasePresenter<P,V>> : IView<P> {
        //presenter引用
        lateinit var presenter : P
    }
    

    大致思路就是为了防止无限制的互相引用泛型,直接把自己的类型也当作泛型。注意把自己当作泛型的类型时,需要放在泛型括号的前面。如果不理解,可以把代码拷贝下去,自己动起手来,慢慢体会。

    相关文章

      网友评论

          本文标题:Java中泛型转Kotlin报错

          本文链接:https://www.haomeiwen.com/subject/qsfmfdtx.html