<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # 泛型 由于集合中什么類型的元素都可以存儲,導致取出時候,如果出現強轉就會引發運行時錯誤. 解決,使用集合必須明確集合中元素的類型,這種方式稱之為泛型 ![](https://box.kancloud.cn/9248e8998323f452db92a43104f11bfa_463x360.png) ## 泛型的好處 泛型的好處 a:將運行時期的ClassCastException,轉移到了編譯時期變成了編譯失敗。 b:避免了類型強轉的麻煩。 演示下列代碼: ~~~ public class GenericDemo { public static void main(String[] args) { List list = new ArrayList(); list.add("abc"); list.add("123"); //list.add(5);//當集合明確類型后,存放類型不一致就會編譯報錯 //集合已經明確具體存放的元素類型,那么在使用迭代器的時候,迭代器也同樣會知道具體遍歷元素類型 Iterator<String> it = list.iterator(); while(it.hasNext()){ String str = it.next(); System.out.println(str.length()); //當使用Iterator<String> //控制元素類型后,就不需要強轉了。獲取到的元素直接就是String類型 } } } ~~~ ## 泛型的通配符 **? 可以接收任意的泛型類型,只能夠取出,不能夠修改** ~~~ public class GenericDemo { public static void main(String[] args) { ArrayList array = new ArrayList(); HashSet<Integer> set = new HashSet<Integer>(); array.add("123"); array.add("456"); set.add(789); set.add(890); iterator(array); iterator(set); } /* * 定義方法,可以同時迭代2個集合 * 參數: 怎么實現 , 不能寫ArrayList,也不能寫HashSet * 參數: 或者共同實現的接口 * 泛型的通配,匹配所有的數據類型 ? */ public static void iterator(Collection<?> coll){ Iterator<?> it = coll.iterator(); while(it.hasNext()){ //it.next()獲取的對象,什么類型 System.out.println(it.next()); } } } ~~~ ## 泛型的限定 ~~~ / * 將的酒店員工,廚師,服務員,經理,分別存儲到3個集合中 * 定義方法,可以同時遍歷3集合,遍歷三個集合的同時,可以調用工作方法 / import java.util.ArrayList; import java.util.Iterator; public class GenericTest { public static void main(String[] args) { //創建3個集合對象 ArrayList cs = new ArrayList(); ArrayList fwy = new ArrayList(); ArrayList jl = new ArrayList(); //每個集合存儲自己的元素 cs.add(new ChuShi("張三", "后廚001")); cs.add(new ChuShi("李四", "后廚002")); fwy.add(new FuWuYuan("翠花", "服務部001")); fwy.add(new FuWuYuan("酸菜", "服務部002")); jl.add(new JingLi("小名", "董事會001", 123456789.32)); jl.add(new JingLi("小強", "董事會002", 123456789.33)); // ArrayList arrayString = new ArrayList(); iterator(jl); iterator(fwy); iterator(cs); } ~~~ ~~~ /* * 定義方法,可以同時遍歷3集合,遍歷三個集合的同時,可以調用工作方法 work * ? 通配符,迭代器it.next()方法取出來的是Object類型,怎么調用work方法 * 強制轉換: it.next()=Object o ==> Employee * 方法參數: 控制,可以傳遞Employee對象,也可以傳遞Employee的子類的對象 * 泛型的限定 本案例,父類固定Employee,但是子類可以無限? * ? extends Employee 限制的是父類, 上限限定, 可以傳遞Employee,傳遞他的子類對象 * ? super Employee 限制的是子類, 下限限定, 可以傳遞Employee,傳遞他的父類對象 */ public static void iterator(ArrayList<? extends Employee> array){ Iterator<? extends Employee> it = array.iterator(); while(it.hasNext()){ //獲取出的next() 數據類型,是什么Employee Employee e = it.next(); e.work(); } } ~~~ ## 泛型接口 定義泛型接口 ~~~ public interface IMessage<T> { public void print(T t); } ~~~ 在接口上必須要定義其相應的子類,所以來講如果要定義子類有兩種形式 **形式一: 在子類繼續設置泛型** ~~~ class MessageImpl<T> implements IMessage<T> { @Override public void print(T t) { System.out.println(t); } } class TestDemo { public static void main(String[] args) { IMessage<String> msg = new MessageImpl<String>(); msg.print(" hello world "); } } ~~~ **形式二: 在子類不設置泛型,而為父接口明確的定義一個泛型類型** ~~~ class MessageImpl implements IMessage<String> { @Override public void print(String s) { System.out.println(s); } } class TestDemo { public static void main(String[] args) { IMessage<String> msg = new MessageImpl(); msg.print(" hello world "); } } ~~~ ## 泛型方法 泛型方法不一定非要定義在支持泛型的類里面.在之前所編寫的所有存在有泛型的方法都是在泛型支持類里面定義的 泛型方法定義 ~~~ //定義一個含有泛型的方法 publicvoidmethod01(Mm){ System.out.println(m); } ~~~ ~~~ //定義一個含有泛型的靜態方法 publicstaticvoidmethod02(Ss){ System.out.println(s); } ~~~ ~~~ class TestDemo { public static void main(String[] args) { String hello = fun("hello"); System.out.println(hello.length()); } //T的類型由傳入的參數類型決定 public static <T> T fun(T t) { return t; } } ~~~ ## 泛型對象 ~~~ class Show<E> { private E name; public E getName() { return name; } public void setName(E name) { this.name = name; } } public class App { public static void main(String[] args) { Show<Integer> res = new Show<>(); res.setName(11); System.out.println(res.getName()); } } ~~~
                  <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>

                              哎呀哎呀视频在线观看