泛型

原文地址:http://www.cnblogs.com/skyislimit/p/5665853.html
平時看java源代碼的時候,如果碰到泛型的話,我想? T K V E這些是經常出現的,但是有時想不起來代表什麼意思,今天整理下: 


? 表示不確定的java類型。 
T  表示java類型。 
K V 分別代表java鍵值中的Key Value。 
E 代表Element。 


Object跟這些東西代表的java類型有啥區別呢? 
Object是所有類的根類,是具體的一個類,使用的時候可能是需要類型強制轉換的,但是用T ?等這些的話,在實際用之前類型就已經確定了,不需要強制轉換。
追問:
也就是說,這個方法能知道返回的是哪種類型(父類),就用T行了?如果完全不知道的就用?用T的得到的對象就不需要類型轉換了,而用?的就必需用強轉了!
追答:
第一種是固定的一種泛型,第二種是只要是Object類的子類都可以,換言之,任何類都可以,因爲Object是所有類的根基類
固定的泛型指類型是固定的,比如:Interge,String. 就是<T extends Collection>


<? extends Collection> 這裏?代表一個未知的類型,
但是,這個未知的類型實際上是Collection的一個子類,Collection是這個通配符的上限.
舉個例子
class Test <T extends Collection> { }


<T extends Collection>其中,限定了構造此類實例的時候T是一個確定類型(具體類型),這個類型實現了Collection接口,
但是實現 Collection接口的類很多很多,如果針對每一種都要寫出具體的子類類型,那也太麻煩了,乾脆還不如用
Object通用一下。
<? extends Collection>其中,?是一個未知類型,是一個通配符泛型,這個類型是實現Collection接口即可。


_________________________上面講的是什麼鬼,當你知道引入通配符泛型的由來之後(下面代碼由java1234.com提供)_________________________________________________________________________________________




The method take(Animal) in the type Test is not applicable for the arguments (Demo<Dog>)
The method take(Animal) in the type Test is not applicable for the arguments (Demo<Cat>)
The method take(Animal) in the type Test is not applicable for the arguments (Demo<Animal>)


當引入泛型之後,遇到這種情況,參數怎麼寫都不適合,總有2個方法不適用,爲了給泛型類寫一個通用的方法,這時候就需要引入了 ?通配符的概念。






複製代碼
public class Demo <T extends Animal>{


    private T ob;


    public T getOb() {
        return ob;
    }


    public void setOb(T ob) {
        this.ob = ob;
    }


    public Demo(T ob) {
        super();
        this.ob = ob;
    }
    
    public void print(){
        System.out.println("T的類型是:"+ob.getClass().getName());
    }
}
發佈了2 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章