Java泛型機制

泛型程序設計

一、泛型程序設計的起源?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;    }}
相關文章
相關標籤/搜索