JAVA进阶教学之(泛型)
生活随笔
收集整理的這篇文章主要介紹了
JAVA进阶教学之(泛型)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
泛型
引言:
- 泛型:泛型允許程序員在編寫代碼時使用一些以后才指定的類型,在實例化時作為參數指明這些類型
- 人話:泛型對規定范圍產生約束,約束后只能存儲泛型指定的類型
- 誕生:JDK5.0以后
?
- 作用:泛型旨在程序的編譯階段起作用,只是給編譯器參考使用的(運行階段泛型沒用)
- 使用:List<類名A標識符>,表示List集合中只允許存儲類名A類型的數據,用泛型來指定集合中存儲的數據類型,<類名標識符>里面一般是類名,也可以自定義類名標識符
?
- 優點:集合存儲的元素類型統一,集合中取出的元素類型是泛型指定類型,不需要進行大量的“向下轉型”,不需要大量的"強制類型轉換"
- 缺點:集合中存儲的元素缺乏多樣性
?
代碼演示:
?
未使用泛型前:
package com.lbj.javase.collection;import java.util.ArrayList; import java.util.Iterator; import java.util.List;public class GenericTest01 {public static void main(String[] args) {List list=new ArrayList<>();//準備對象Animal animal=new Cat();Animal animal1=new Bird();//將對象添加到集合中list.add(animal);list.add(animal1);//遍歷集合,取出每個Animal,讓它move()Iterator iterator=list.iterator();while (iterator.hasNext()){//o中沒有move方法,無法調用,需要向下轉型Object o=iterator.next();//通過判斷是否o屬于某個類,達到轉型效果if (o instanceof Animal){Animal a= (Animal) o;a.move();System.out.println(a);}}}} class Animal{public void move(){System.out.println("動物在移動");} } class Cat extends Animal{//子類特有方法public void catchMouse(){System.out.println("貓抓老鼠");} } class Bird extends Animal{//子類特有方法public void fly(){System.out.println("鳥在飛");} }?
使用泛型后:
package com.lbj.javase.collection;import java.util.ArrayList; import java.util.Iterator; import java.util.List;public class GenericTest01 {public static void main(String[] args) {List list=new ArrayList<>();//準備對象Animal cat=new Cat();Animal bird=new Bird();//將對象添加到集合中list.add(cat);list.add(bird);//遍歷集合,取出每個Animal,讓它move() // Iterator iterator=list.iterator(); // while (iterator.hasNext()){ // //o中沒有move方法,無法調用,需要向下轉型 // Object o=iterator.next(); // // //通過判斷是否o屬于某個類,達到轉型效果 // if (o instanceof Animal){ // Animal a= (Animal) o; // a.move(); // System.out.println(a); // }//}//獲取迭代器Iterator<Animal> iterator=list.iterator();//遍歷集合,表示迭代器迭代的是Animal類型while (iterator.hasNext()){//使用泛型后,每一次迭代返回的數據都是Animal類型Animal animal=iterator.next();animal.move();System.out.println(animal);//調用子類特有的方法還是需要繼續向下轉型的if (animal instanceof Cat){Cat c= (Cat) animal;c.catchMouse();}if (animal instanceof Bird){Bird b= (Bird) animal;b.fly();}}}} class Animal{public void move(){System.out.println("動物在移動");} } class Cat extends Animal{//子類特有方法public void catchMouse(){System.out.println("貓抓老鼠");} } class Bird extends Animal{//子類特有方法public void fly(){System.out.println("鳥在飛");} }?
自定義泛型:
引言 :
自定義泛型類就是把泛型定義在類上,用戶使用該類的時候,才把類型明確下來
?
自定義泛型的時候,<>是尖括號中的一個標識符,內容隨便寫
java源代碼中經常出現的<E>和<T>
<E> 表示 Element
<T>表示 Type
?
用戶想要使用哪種類型,就在創建的時候指定類型。使用的時候,該類就會自動轉換成用戶想要使用的類型了。
?
代碼演示:
package com.lbj.javase.collection;/*** @author LBJ* @version V1.0* @Package com.lbj.javase.collection* @date 2021/4/10 15:49* @Copyright 公司*/ public class GenericTest03{ //類比得出結論 public static void main(String[] args) {//創建對象并指定元素類型ObjectTool<String> tool = new ObjectTool<>();tool.setObj(new String("asdfghjkl"));String s = tool.getObj();System.out.println(s);//創建對象并指定元素類型ObjectTool<Integer> objectTool = new ObjectTool<>();/*** 如果我在這個對象里傳入的是String類型的,它在編譯時期就通過不了了.*///objectTool.setObj("asda");objectTool.setObj(10);int i = objectTool.getObj();System.out.println(i); } }class ObjectTool<T>{public T obj;public T getObj() {return obj;}public void setObj(T obj) {this.obj = obj;} }總結
以上是生活随笔為你收集整理的JAVA进阶教学之(泛型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ h cpp文件如何关联_C++核
- 下一篇: Exception in thread