大家好:
英文名字叫做:Generic
我來自JDK1.5大家庭的一位新成員,我的本質就是參數化類型,就是說我所操作的數據類型被定義爲一個參數。這個數據類型可以使用在類、接口和方法中,這樣就可直呼其大名泛型類、泛型接口盒泛型方法啦。
下面我來說說我的作用吧:
我主要是用來幫助javac編譯器的,可以幫助限定集合的輸入類型,使編譯器擋住源程序非法輸入。便器編譯帶類型說明的集合時,編譯器會去除類型信息,使程序的運行不受影響。
在獲取類時即可知道其數據類型這樣我又爲編譯器解決了強制轉換的煩惱。
注:泛型的好處是在編譯的時候檢查類型安全,並且所有的強制轉換都是自動和隱式的,提高代碼的重用率。
我可是個有原則的人,要找我幫忙違反這幾條規則我可不忙:
1.泛型的類型參數只能是類類型的(包括自定義類),不能是簡單類型。
2.同一個泛型可以對相應多種不同的版本(因爲參數類型不能確定),不同版本的泛型類實例是不兼容的。
3.泛型的類型參數可以有多個。
4.泛型的參考類型還可以使用extends語句,如< T extends superclass > 習慣上稱作爲“有界類型”。
5.泛型的參考類型還可以使用通配符,例如:Class< ?> classType = Class.forName("java.lang.String");
好啦,到這裏我的基本簡歷就介紹完了,下面就給你們再講一個真是滴故事吧:
class Gen<T> {
private T ob; //定義泛型成員變量
public Gen(T ob) {
this.ob = ob;
}
public T getOb() {
return ob;
}
public void setOb(T ob) {
this.ob = ob;
}
public void showType() {
System.out.println("T的實際類型是: " + ob.getClass().getName());
}
}
public class GenDemo {
public static void main(String[] args){
//定義泛型類Gen的一個Integer版本
Gen<Integer> intOb=new Gen<Integer>(88);
intOb.showType();
int i= intOb.getOb();
System.out.println("value= " + i);
System.out.println("----------------------------------");
//定義泛型類Gen的一個String版本
Gen<String> strOb=new Gen<String>("Hello Gen!");
strOb.showType();
String s=strOb.getOb();
System.out.println("value= " + s);
}
}
謝謝大家的認真聽取我的自我介紹,十分感謝!!
參考文獻:
1.360百科http://baike.so.com/doc/788725.html
2.heima培訓教程