有人會疑問,泛型是什麼東東? 引用官方的話來講: java
泛型就是:「the type system allows a type or method to operate on objects of various types while providing compile-time type safety. It adds compile-time type safety to the Collections Framework and eliminates the drudgery of casting」。看不明白嗎??不要緊,下面我就給你們解釋一下個人理解(注:是個人理解,若是你表達的更好,歡迎指正~)。 函數
說白了,jdk中加入了泛型,可讓咱們省去類型強制轉換的工做,同時加到編譯時異常中來;再說白一點,就是你使用了泛型以後,不用再作強制類型轉換了,同時若是你的賦值對象不匹配,那麼編譯器會警告你這裏出錯了,而不用再等到程序運行時報了一個ClassCastException的時候才發現代碼有問題了。不知道我說的這麼白白了,你明白了沒有,尚未明白,那請往下看.... 測試
好比,以前咱們想要在操做集合類中的對象是這樣寫: this
static void expurgate(Collection c) { for (Iterator i = c.iterator(); i.hasNext(); ){ if (((String) i.next()).length() == 4){ i.remove(); } } }
看着這麼多的括號你頭疼了嗎??反正我是暈了~來看看使用泛型以後的代碼: spa
static void expurgate(Collection<String> c) { for (Iterator<String> i = c.iterator(); i.hasNext(); ){ if (i.next().length() == 4){ i.remove(); } } }
感受沒有少什麼東西,不過清析了不少,沒錯!這就是泛型的一個簡單的應用。可讓咱們在從集合中取元素的時候再也不作討厭的強制類型轉換,也不用擔憂我轉換的類型是否是集合裏面存儲的類型,用一個字來形容,啊~~~(擦,不要想多了)。 code
其實,只是上面單純的這些,還不足以讓我如此的激動,泛型還能夠應用在方法的參數裏,那是什麼概念?直接上代碼: 對象
/** * 參數使用泛型 */ public static <T> void testParam(T param){ System.out.println(param); } public static void main(String[] args) { testParam(2f); testParam("test"); testParam(123); }
運行結果: 2.0 test 123
觀衆朋友們看出什麼來了嗎??沒錯,就是我testParam方法的參數使用了一個泛型,那麼這樣用有什麼好處呢?那就是:本身體會去吧~ rem
其實,只是上面的這些情景,不足以讓我如此的激動,泛型還能夠用在返回值上(啊??你說什麼~~),沒錯,泛型也能夠用在返回值類型上。代碼以下: 編譯器
/** * 返回值使用泛型 */ public <E extends Comparable<E>>E retunGenerics(E e1, E e2){ E t = e1; if(e2.compareTo(e1) > 0 ){ t = e2; } return t; }
這時候,你是否是也已經開始暗爽了呢,那你猜我下面要說些什麼呢?沒錯,恭喜你答對了 it
其實,只是上面的這些情景,還不足以讓我如此的激動。泛型還能夠用在類上(oh,shit!),代碼以下:
public class GenericsType <T>{ private T t ; public GenericsType(T t){ this.t = t ; } public void printValue(){ System.out.println(t); } }
好,這時候若是我調用構造函數進行對象初始化的時候,會有什麼不一樣呢??我寫了一下
/** * 測試泛型類 */ @Test public void testGenericsType(){ GenericsType<Integer> gt = new GenericsType<Integer>(10); gt.printValue(); GenericsType<String> gt1 = new GenericsType<String>("test"); gt1.printValue(); }
想知道結果是什麼嗎??那大家回去本身試一下吧,若是你對上面的內容已經掌握,我想你已經知道結果了~
好了,說了這麼多,不知道觀衆朋友們在使用泛型上有沒有一點本身的想法啦??若是有好的想法,說出來哈!~
Thank you ~
goodbey ..
&(#$)#Q&$)(&#)($#W*)@$%^^^^^^****