Java--集合之泛型
阿新 • • 發佈:2020-10-26
一、泛型定義
- Java泛型是 JDK1.5中引入的一個新特性,其本質是引數化型別,把型別作為引數傳遞
- 常見形式有泛型類、泛型介面、泛型方法。
- 語法:<T,...> T稱為型別佔位符,表示一種引用型別 (T也可以寫為E K V)
- 好處:提高程式碼的重用性;防止型別轉換異常,提高程式碼的安全性
二、泛型類
語法:類名<T>
package com.monv.generic; /** * 泛型類 * 語法:類名<T> * T是型別佔位符,表示一種引用型別,如果編寫多個用逗號隔開 * @author Administrator * */ publicclass MyGeneric<T> { //使用泛型T //1.建立變數 T t1; //2.泛型作為方法的引數 public void show(T t){ //這裡只能建立變數 不能例項化 因為不知道T具體的型別是什麼 不知道其構造方法是共有的還是私有的,有沒有無參構造 // T t1 = new T(); System.out.println(t); } //3.泛型作為方法的返回值 public T getT(){ return t1; } }-------------------------------------------------------- package com.monv.generic; public class TestGeneric { public static void main(String[] args) { //使用泛型類來建立物件 //注意:1.泛型只能是引用型別 2.不同泛型型別物件之間不能相互賦值 MyGeneric<String> myGeneric = new MyGeneric<String>(); myGeneric.t1= "hello"; myGeneric.show("java"); String s1=myGeneric.getT(); MyGeneric<Integer> myGeneric2 = new MyGeneric<Integer>(); myGeneric2.t1 = 150; myGeneric2.show(300); myGeneric2.getT(); }
三、泛型介面
語法:介面名<T>
package com.monv.generic; /** * 泛型介面 * 語法:介面名<T> * 注意:不能使用泛型建立靜態常量 * @author Administrator * */ public interface MyInterface<T> { String name = "張三"; T Service(T t);//抽象方法 } --------------泛型介面實現方法1------------------------------- package com.monv.generic; public class MyInterfaceImpl implements MyInterface<String>{ @Override public String Service(String t) { // TODO Auto-generated method stub System.out.println(t); return t; } } --------------泛型介面實現方法2------------------------------- package com.monv.generic; /** * 實現類也定義成泛型類 */ public class MyInterfaceImpl2<T> implements MyInterface<T>{ @Override public T Service(T t) { // TODO Auto-generated method stub System.out.println(t); return t; } } -------------------測試例項-------------------------------- package com.monv.generic; public class TestGeneric { public static void main(String[] args) { //泛型介面 MyInterfaceImpl myInterfaceImpl = new MyInterfaceImpl(); myInterfaceImpl.Service("大家好!!"); MyInterfaceImpl2<String> myInterfaceImpl2 = new MyInterfaceImpl2<String>(); myInterfaceImpl2.Service("java世界!"); MyInterfaceImpl2<Integer> myInterfaceImpl3 = new MyInterfaceImpl2<Integer>(); myInterfaceImpl3.Service(200); } }
四、泛型方法
語法:<T>方法返回值型別
package com.monv.generic; /** * 泛型方法 * 語法:<T>方法返回值型別 */ public class MyGenericMethod { //泛型方法 T作為方法的返回型別 public <T> T show(T t){ System.out.println("泛型方法 "+t); return t; } }--------------測試例項-------------------------------- package com.monv.generic; public class TestGeneric { public static void main(String[] args) { //泛型方法 型別不需要傳遞,型別由傳遞的值的型別來決定 MyGenericMethod myGenericMethod = new MyGenericMethod(); myGenericMethod.show("Hello World"); myGenericMethod.show(205); myGenericMethod.show(3.415); } }
五、泛型集合
概念:引數化型別、型別安全的集合,強制集合元素的型別必須一致。
特點:編譯時即可檢查,而非執行時丟擲異常
訪問時不必型別轉換(拆箱)。
不同泛型之間引用不能相互賦值,泛型不存在多型
package com.monv.generic; public class Student { String name; Integer age; public Student() { // TODO Auto-generated constructor stub } public Student(String name, Integer age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "Student [name=" + name + ", age=" + age + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } } ----------------------------------------------------------- package com.monv.generic; import java.util.ArrayList; import java.util.Iterator;public class Demo { public static void main(String[] args) { //ArrayList 也是泛型類 在用的時候沒有傳遞型別 預設的是Object類 可以Add任何型別的資料 ArrayList arrayList = new ArrayList(); arrayList.add("XXX"); arrayList.add("YYY"); arrayList.add(10); arrayList.add(30); //arrayList2 在建立的時候傳遞了型別為 String 所以在Add的時候只能新增String型的資料 ArrayList<String> arrayList2 = new ArrayList<String>(); arrayList2.add("XXX"); arrayList2.add("YYY"); // arrayList2.add(10); for (String string : arrayList2) { System.out.println(string); } ArrayList<Student> arrayList3 = new ArrayList<Student>(); Student s1 = new Student("小樂", 18); Student s2 = new Student("小明", 19); Student s3 = new Student("小花", 19); arrayList3.add(s1); arrayList3.add(s2); arrayList3.add(s3); // arrayList3.add("111");//只能新增Student型別的 新增String型別的就會報錯 Iterator<Student> it = arrayList3.iterator(); while(it.hasNext()){ Student str = it.next(); System.out.println(str.toString()); } } }