Java中泛型轉(zhuǎn)Kotlin報(bào)錯(cuò)

在使用Kotlin重構(gòu)原來(lái)的Java項(xiàng)目時(shí),Base類(lèi)中Java的泛型,轉(zhuǎn)Kotlin竟然報(bào)錯(cuò)了,下面看一段偽代碼

//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;
}

這個(gè)代碼在Java中 沒(méi)有任何問(wèn)題,但是轉(zhuǎn)Kotlin后,出現(xiàn)了意想不到的報(bào)錯(cuò)。

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
}

報(bào)錯(cuò)截圖如下:


泛型2.png
泛型1.png

錯(cuò)誤大致意識(shí)是:類(lèi)型不對(duì),這。。。簡(jiǎn)直離譜。
為什么Java可以,轉(zhuǎn)Kotlin居然報(bào)錯(cuò)了。嘗試了很多種方案以后:
終于功夫不負(fù)有心人。給點(diǎn)耐心,終于解決了:代碼如下:

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
}

大致思路就是為了防止無(wú)限制的互相引用泛型,直接把自己的類(lèi)型也當(dāng)作泛型。注意把自己當(dāng)作泛型的類(lèi)型時(shí),需要放在泛型括號(hào)的前面。如果不理解,可以把代碼拷貝下去,自己動(dòng)起手來(lái),慢慢體會(huì)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 泛型產(chǎn)生 Java泛型是JDK1.5引入的一個(gè)新特性,是一種參數(shù)化類(lèi)型。參數(shù)化類(lèi)型就是在不創(chuàng)建新類(lèi)型的情況下,通過(guò)...
    kevinsEegets閱讀 770評(píng)論 3 1
  • 建議先閱讀我的上一篇文章 -- Java 泛型 和 Java 泛型一樣,Kotlin 泛型也是 Kotlin 語(yǔ)言...
    JohnnyShieh閱讀 6,619評(píng)論 1 26
  • 正文 本文主要列舉Java泛型與Kotlin泛型的基本知識(shí),以及兩者的區(qū)別。 什么泛型 泛型程序設(shè)計(jì)是程序設(shè)計(jì)的一...
    珠穆朗瑪小王子閱讀 590評(píng)論 0 1
  • Java為什么引入泛型 眾所周知,Java 5才最大的亮點(diǎn)就是引入泛型,那么Java引入泛型的目的是什么?這就需要...
    大棋17閱讀 1,914評(píng)論 0 3
  • 什么是泛型? 泛型是一種參數(shù)化類(lèi)型,將操作的數(shù)據(jù)類(lèi)型(非基本類(lèi)型)作為一個(gè)參數(shù),這種參數(shù)類(lèi)型可以在類(lèi)、接口、方法中...
    isLJli閱讀 430評(píng)論 0 2

友情鏈接更多精彩內(nèi)容