原文地址: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()); } }
泛型
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.