泛型:jdk1.5版本以後出現的一個安全機制。表現格式:< >
好處:
1:将運作時期的問題ClassCastException問題轉換成了編譯失敗,展現在編譯時期,程式員就可以解決問題。
2:避免了強制轉換的麻煩。
隻要帶有<>的類或者接口,都屬于帶有類型參數的類或者接口,在使用這些類或者接口時,必須給<>中傳遞一個具體的引用資料類型。
泛型技術:其實應用在編譯時期,是給編譯器使用的技術,到了運作時期,泛型就不存在了。
為什麼? 因為泛型的擦除:也就是說,編輯器檢查了泛型的類型正确後,在生成的類檔案中是沒有泛型的。
在運作時,如何知道擷取的元素類型而不用強轉呢?
泛型的補償:因為存儲的時候,類型已經确定了是同一個類型的元素,是以在運作時,隻要擷取到該元素的類型,在内部進行一次轉換即可,是以使用者不用再做轉換動作了。
什麼時候用泛型類呢?
當類中的操作的引用資料類型不确定的時候,以前用的Object來進行擴充的,現在可以用泛型來表示。這樣可以避免強轉的麻煩,而且将運作問題轉移到的編譯時期。用的是引用資料類型,不能用基本資料類型
不用泛型,也可以用object接收 ,但是用object接收 需要強制轉換,用泛型,這個更安全,泛型類 把運作時的報錯,轉移到了編譯時期,泛型類,通過參數傳遞進來,例如定義個工具類操作的是對象,但是不知道操作啥對象,就先定一個參數,後期傳遞進來啥對象,就用啥對象
在jdk1.5 以後,使用泛型來接收類中要操作的引用資料類型,泛型類,什麼時候用,當類中的操作引用資料類型不确定的時候,就用泛型來表示
泛型在程式定義上的展現:
//泛型類:将泛型定義在類上。
class Tool<Q> {
private Q obj;
public void setObject(Q obj) {
this.obj = obj;
}
public Q getObject() {
return obj;
}
}
//當方法操作的引用資料類型不确定的時候,可以将泛型定義在方法上。
public <W> void method(W w) {
System.out.println("method:"+w);
}
//靜态方法上的泛型:靜态方法無法通路類上定義的泛型。如果靜态方法操作的引用資料類型不确定的時候,必須要将泛型定義在方法上。
public static <Q> void function(Q t) {
System.out.println("function:"+t);
}
//泛型接口.
interface Inter<T> {
void show(T t);
}
class InterImpl<R> implements Inter<R> {
public void show(R r) {
System.out.println("show:"+r);
}
}
class InterImpl implements Inter<String>
{
public void show(String str)
{
System.out.println("show+"+str);
}
}