天天看點

java基礎-泛型(七)

泛型: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);

}

}