<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                我們先來看一個簡單的例子,Apple是Fruit的子類,思考下Apple[]和Fruit[],以及`List<Apple>`和`List<Fruit>`是什么關系呢? Apple[] appleArray = new Apple[10]; Fruit[] fruitArray = appleArray; //允許 fruitArray[0] = new Banana(0.5); //編譯通過,運行報ArrayStoreException List<Apple> appleList = new ArrayList<Apple>(); List<Fruit> fruitList = appleList; //不允許 我們發現一個奇怪的現象,Apple[]類型的值可以賦值給Fruit[]類型的值,而且還可以將一個Banana對象添加到fruitArray,編譯器能通過。作為對比,`List<Friut>`類型的值則在一開始就禁止被賦值為`List<Apple>`類型的值,這其中到底有什么不同呢? 其實這里涉及一個關鍵點,**數組是協變的,而List是不變的。簡單來說,就是Object[]是所有對象數組的父類,而`List<Object>`卻不是`List<T>`的父類**。 在解釋為什么在Java中無法聲明泛型數組之前,我們先來看一下Java泛型的實現方式。**Java中的泛型是類型擦除的,可以看作偽泛型,簡單來說,就是你無法在程序運行時獲取到一個對象的具體類型**。我們可以用以下代碼來對比一下`List<T>`和數組: System.out.println(appleArray.getClass()); System.out.println(appleList.getClass()); // 運行結果 class [Ljavat.Apple; class java.util.ArrayList 從上面的代碼我們可以知道,**數組在運行時是可以獲取自身的類型,而`List<Apple>`在運行時只知道自己是一個List,而無法獲取泛型參數的類型。而Java數組是協變的,也就是說任意的類A和B,若A是B的父類,則A[]也是B[]的父類。但是假如給數組加入泛型后,將無法滿足數組協變的原則,因為在運行時無法知道數組的類型**。 Kotlin中的泛型機制與Java中是一樣的,所以上面的特性在Kotlin中同樣存在。比如通過下面的方式同樣無法獲取列表的類型: val appleList = ArrayList<Apple>() println(appleList.javaClass) 但不同的是,**Kotlin中的數組是支持泛型的,當然也不再協變,也就是說你不能將任意一個對象數組賦值給`Array<Any>`或者`Array<Any? >`**。在Kotlin中Any為所有類的父類,下面是一個例子: val appleArray = arrayOfNulls<Apple>(3) val anyArray: Array<Any? > = appleArray //不允許 我們已經知道了在Kotlin和Java中泛型是通過類型擦除來實現的,那么這又是為什么呢?
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看