很多年前就接觸泛型了(那時候用的是清華大學(xué)出版社出版的JAVA SE 2.0一本紫色封面的書)對于泛型的理解僅限于的形式男娄,至于泛型的運(yùn)行機(jī)制,泛型與JVM的關(guān)系沒有過多的介紹,可能是作者覺得不重要吧(忍不住吐槽沪伙,太坑)
廢話不多說:我真正學(xué)習(xí)泛型是在工作一年之后瓮顽,我發(fā)現(xiàn)大神寫的代碼帶了一堆的尖括號,看都看不懂自慚形愧围橡,甚至懷疑自己是不是科班出身的
Q1:為什么要使用泛型程序設(shè)計(jì)
為了實(shí)現(xiàn)代碼可以被多種類型的對象復(fù)用暖混。例如ArrayList , T作為類型參數(shù)可以是Integer或者String自定義類也可以。
Q2:泛型程序設(shè)計(jì)的優(yōu)點(diǎn)
1.省掉了強(qiáng)制類型轉(zhuǎn)換翁授,這也是我對于泛型認(rèn)識的唯一印象
沒有泛型之前代碼要這么寫,如果你的同事不告訴你ArrayList實(shí)際存的什么類型的拣播,恭喜你中獎了。收擦。贮配。。
ArrayListnameList =newArrayList(100);//add names
Stringsome = (String) nameList.get(0);
有泛型以后塞赂,使代碼的可讀性和安全性更好
ArrayListnameList =newArrayList(100);
2.泛型類和泛型方法
泛型類:
publicclassPair { ... }
publicclassArrayAlg {
????public staticTgetMiddle(T...a){
????????returna[a.length/2];
????}
}
Stringmidle = ArrayAlg.getMiddle("a","b","c");
泛型方法中類型變量放在修飾符(public static)后面放在返回值類型前面泪勒。
3.關(guān)鍵字extends作進(jìn)一步限定,如果類型T沒有實(shí)現(xiàn)Comparable接口那么調(diào)用min.compareTo(..)就會報(bào)錯
public static Pairminmax(T[] a){
????if(a ==null|| a.length==0)
????????return null;
????Tmin = a[0];
????Tmax = a[0];
????for(inti =0;i < a.length;i++){
????????if(min.compareTo(a[i]) >0) min = a[i];
????????if(max.compareTo(a[i]) <0) min = a[i];
????}
????return newPair<>(min,max);
}