<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 概述 泛型:泛泛的類型.就是不確定的類型. 集合中是可以存放任意對象的,只要把對象存儲集合后,那么這時它們都會被提升為object類型. 當我們在取出每一個對象,并且進行相應的操作, 這時必須采用類型轉換 . 由于集合什么類型的元素都可以存儲 .導致取出時 ,如果出現強轉就會引發運行時classCastException .怎么來解決這個問題呢 ? 使用集合時,必須明確集合中元素的類型. 這種方式稱為"泛型" . 為了避免安全隱患, 1.5出現新的安全機制,保證程序的安全性 , 這就是泛型 . ~~~ ArrayList<String> arr = new ArrayList<String>(); //中括號的內容就是指定泛型 ~~~ ## 泛型中的好處 1. 將運行時期的ClassCastException,轉移到了編譯時期的編譯失敗. 2. 避免了類型強制轉換的麻煩. ~~~ public static void main(String[] args) { dome1(); dome2(); } //不使用泛型 public static void dome1() { ArrayList names = new ArrayList(); names.add("鋼鐵俠"); names.add(123); names.add(true); for (Object o : names) { System.out.println(((String) o).length()); //下面沒法操作了 } } //使用泛型 public static void dome2() { ArrayList<String> names = new ArrayList(); names.add("超人"); //如果傳入不是String類型就報錯了 names.add("鋼鐵俠"); names.add("蝙蝠俠"); for (String s : names) { System.out.println(s.length()); } } ~~~ ## 泛型中E的含義 就是儲存類型的變量,等待接收一種數據類型. ![](https://box.kancloud.cn/5ca24ed57e6a094aa354a1f3b9fc5ab3_842x405.png) ## 泛型類 什么時候確定使用的類型呢?當創建該類對象的時候就可以確定了. ### 偽泛型 java中的泛型是偽泛型 , 是一種編譯手段 . 如下面這段代碼, 如果add的是String類型則編譯成功,如果不是String類型則編譯失敗 . 編譯成功后在class文件中是不存在泛型的 . 也就是說泛型只是在編譯時有泛型 , 編譯成功后是不存在 . ~~~ ArrayList<String> arr = new ArrayList<String>(); arr.add("") ~~~ ### 使用泛型的好處 1. 將運行時期的ClassCastException轉移到了編譯期,變成了編譯失敗 . 2. 避免了類型強轉的麻煩 . ~~~ ArrayList<String> arr = new ArrayList<String>(); arr.add("123"); //當集合明確類型之后,存放不一致的類型就會編譯失敗 arr.add("456"); //集合已經明確存放的元素類型,那么在使用迭代器的時候,迭代器也同樣會知道具體遍歷元素類型 arr.add("789"); Iterator<String> it = arr.iterator(); //當使用Iterator<String>控制元素類型后,就不需要強轉了.獲取到的元素直接就是String類型 while(it.hasNext()) { System.out.println(it.next()); } ~~~ ### 泛型方法 ~~~ public class GenericityDome<E> { E name; public E getName() { return name; } public void setName(E n) //使用了類的泛型方法 { this.name = n; } public <T> void show(T t) //泛型方法 { System.out.println(t); } } ~~~ 調用 ~~~ GenericityDome<String> g = new GenericityDome<>(); g.show(1); //調用方法傳遞參數的時候才能確定類型.這個就是泛型方法 ~~~ ### 帶有泛型接口 泛型接口上的泛型到底什么時候確定? 1. 當子類實現接口的時候確定接口上的泛型. 2. 當子類實現接口的時候,還是不確定泛型,把接口的泛型繼續實現下來. ~~~ public interface GenericityDome<E> { public abstract void show(E e); } //子類實現接口的時候確定 class MyClass1 implements GenericityDome<String> { public void show(String s) { } } //當實現類創建對象的時候確定泛型 class MyClass2<Q> implements GenericityDome<Q> { public void show(Q s) { } } ~~~ ### 泛型通配符 ? 代表任意類型 ~~~ ? ~~~ 優點 : 各種類型的泛型都可以迭代 . 缺點 : 類型已經不確定了 . 所以這個方法只適合做遍歷 . ~~~ public class Test { public static void main(String[] args) { ArrayList<Integer> arr = new ArrayList<Integer>(); arr.add(123); arr.add(456); HashSet<String> set = new HashSet<String>(); set.add("123"); set.add("456"); it(set); } public static void it(Collection<?> collection) { Iterator<?> coll = collection.iterator(); while(coll.hasNext()){ System.out.println(coll.next()); } } } ~~~ ## 泛型通配符注意 泛型通配符是沒有意義單獨的,一般是組合使用. ~~~ <? extends Animal> //泛型必須是Animal或者Animal的子類 ~~~ ~~~ <? super Animal> //泛型必須是Animal或者Animal的父類 ~~~ ~~~ public static void main(String[] args) { ArrayList<String> names1 = new ArrayList<>(); names1.add("111"); names1.add("222"); names1.add("333"); ArrayList<String> names2 = new ArrayList<>(); names2.add("aaa"); names2.add("bbb"); names2.add("ccc"); names1.addAll(names2); ArrayList<Integer> names3 = new ArrayList<>(); names3.add(111); names3.add(222); names3.add(333); names1.addAll(names3); //這里是加不進去的,可以查看addAll()的源碼,它使用泛型通配符控制住了添加進去的類型. } ~~~
                  <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>

                              哎呀哎呀视频在线观看