一、泛型程序設計的起源?java
泛型是JDK1.5增長的新特性。數組
二、使用泛型的好處?安全
使用泛型機制編寫的代碼比那些雜亂使用Object變量,而後再進行強制類型轉換的代碼具備更好的安全性和可讀性。spa
public class GenericTest01 {
public static void main(String[] args) {
/*
// 建立一個集合
List list = new ArrayList();
// 建立對象
Cat c = new Cat();
Bird b = new Bird();
// 添加對象
list.add(c);
list.add(b);
// 遍歷集合
Iterator integer = list.iterator();
while (integer.hasNext()) {
Object obj = integer.next();
if (obj instanceof Animal) {
Animal a = (Animal)obj;
a.move();
}
}*/
// 建立集合,使用泛型
List<Animal> list = new ArrayList<Animal>();
Cat c = new Cat();
Bird b = new Bird();
list.add(c);
list.add(b);
// 獲取迭代器
// 這個表示迭代器迭代的是Animal類型
Iterator<Animal> iterator = list.iterator();
while (iterator.hasNext()) {
Animal a = iterator.next();
a.move();
}
}
}
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("鳥兒在飛翔!");
}
}
三、泛型的缺點是什麼?
使集合中的元素單一,可是在大多數業務中,集合中的元素是統一的,因此這種新特性逐漸被你們承認。
四、磚石表達式
JDK8以後引入了:自動類型推斷機制。(又稱爲磚石表達式)
public class GenericTest02 {
public static void main(String[] args) {
// 使用泛型,建立一個Animal類型的數組
List<Animal> list = new ArrayList<>();
// 添加元素
list.add(new Animal());
list.add(new Cat());
list.add(new Bird());
// 遍歷集合
// 不使用泛型默認返回的是Object類型
Iterator<Animal> iterator = list.iterator();
while (iterator.hasNext()) {
Animal animal = iterator.next();
animal.move();
}
List<String> stringList = new ArrayList();
// 類型不匹配
// stringList.add(new Animal());
// stringList.add(123);
// stringList.add(new Object());
// 添加元素
stringList.add("http://www.baidu.com");
stringList.add("http://www.4399.com");
stringList.add("http://www.7k7k.com");
// 遍歷
Iterator<String> it = stringList.iterator();
while (it.hasNext()) {
/* 若是沒有使用泛型,如下代碼就得這樣寫
Object o = it.next();
if (o instanceof String) {
String s1 = (String) o;
String newString = s1.substring(7);
System.out.println(newString);
}*/
// 直接經過迭代器獲取了String類型的數據
String s = it.next();
String s1 = (String) s;
String newString = s1.substring(7);
System.out.println(newString);
}
}
}
五、自定義泛型
自定義泛型的時候,尖括號中是一個標識符,能夠隨便寫。
java源代碼中常常出現的是:<E>和<T> E是Element首字母大寫,T是Tyte首字母大寫
public class GenericTest03<A> { public void doSome(A o) { System.out.println(o); } public static void main(String[] args) { GenericTest03<String> gt1 = new GenericTest03<>(); // 類型不匹配 // gt1.doSome(100); gt1.doSome("abc"); GenericTest03<Integer> gt2 = new GenericTest03<>(); // 類型不匹配 // gt2.doSome("abc"); gt2.doSome(100); GenericTest03 gt3 = new GenericTest03<>(); gt3.doSome(new Object()); MyIterator<String> mi = new MyIterator<>(); String s1 = mi.get(); MyIterator<Animal> mi2 = new MyIterator<>(); Animal a1 = mi2.get(); }}class MyIterator<T> { public T get() { return null; }}