Java泛型實(shí)現(xiàn)機(jī)制

  • 原理

    Java泛型是通過(guò)類型擦除來(lái)實(shí)現(xiàn)。

  • 類型擦除的好處

    • 運(yùn)行時(shí)內(nèi)存負(fù)擔(dān)小

      諸如List<String>、List<Integer>等在運(yùn)行時(shí)只會(huì)存在List一個(gè)類型。

    • 兼容性好

      Java新增泛型(1.5)之后的版本可以兼容老版本的原始類型。

  • 類型擦除的問(wèn)題

    • 泛型參數(shù)不能使用基本類型

      不能使用如List<int>的類型,只能使用List<Integer>等,存在裝箱和拆箱的開銷。

    • 泛型類型無(wú)法用作方法重載

      void foo(List<Integer> list)和void foo(List<String> list)的參數(shù)類型在編譯完成后都是List。

    • 泛型類型無(wú)法當(dāng)作真實(shí)類型使用

        <T> void foo(T t){
              T instance = new T();
              T[] arr = new T[1];
              Class c = T.class;
              List<T> list = new ArrayList<>();
              if(list instanceOf List<某類型>){}
          }
      

      如上這種是不可行的。

    • 靜態(tài)方法無(wú)法引用類泛型參數(shù)

      類的泛型參數(shù)只有類實(shí)例化的時(shí)候才知道是什么類型。

      靜態(tài)方法若要使用泛型,一般在方法上聲明一個(gè)泛型類型,如static <S> S foo(S s) {}。

    • 運(yùn)行時(shí)類型強(qiáng)轉(zhuǎn)開銷

      泛型出現(xiàn)(1.5)之前,手動(dòng)強(qiáng)轉(zhuǎn):

      List strs = new ArrayList();
      strs.add("str");
      String val = (String)strs.get(0);
      

      泛型出現(xiàn)(1.5)之后,自動(dòng)強(qiáng)轉(zhuǎn):

      原因:編譯完成后類型被擦除。

      List<String> strs = new ArrayList();
      strs.add("str");
      String val = strs.get(0);
      
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 1、基本應(yīng)用 Java泛型可以用在類、接口和方法上?;臼褂谜?qǐng)參考《on Java 8》. 2、類型擦除 ? ...
    流_心閱讀 372評(píng)論 0 0
  • 簡(jiǎn)介 泛型的意思就是參數(shù)化類型,通過(guò)使用參數(shù)化類型創(chuàng)建的接口、類、方法,可以指定所操作的數(shù)據(jù)類型。比如:可以使用參...
    零度沸騰_yjz閱讀 3,402評(píng)論 1 15
  • 開發(fā)人員在使用泛型的時(shí)候,很容易根據(jù)自己的直覺(jué)而犯一些錯(cuò)誤。比如一個(gè)方法如果接收List作為形式參數(shù),那么如果嘗試...
    時(shí)待吾閱讀 1,123評(píng)論 0 3
  • 參考:java核心技術(shù) 一、Java泛型的實(shí)現(xiàn)方法:類型擦除 前面已經(jīng)說(shuō)了,Java的泛型是偽泛型。為什么說(shuō)Jav...
    御前灬碼夫閱讀 1,116評(píng)論 0 7
  • (80)今天和姑娘一起制定了寒假計(jì)劃表,為了寒假計(jì)劃能順利進(jìn)行,我們把所有寒假要做的作業(yè)都列了出來(lái),然后按內(nèi)容分時(shí)...
    王陽(yáng)媽媽閱讀 166評(píng)論 0 0

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