1 回答

TA貢獻1815條經驗 獲得超10個贊
具體使用方法~
1、定義泛型類
在定義帶泛型的類時,在緊跟類命之后的 < >內,指定一個或多個泛型的名字,同時也可以對泛型的取值范圍進行限定,多個泛型之間用,號分隔。
定義完泛型后,可以在定義位置之后的類的幾乎任意地方(靜態塊,靜態屬性,靜態方法除外)使用泛型,就像使用普通的類型一樣。
注意,父類定義的泛型不能被子類繼承。
例:
//自定義一個泛型 public class MyGenerics <T1,T2 > { private T1 param1; private T2 param2; public T1 getParam1() { return param1; } public void setParam1(T1 param1) { this.param1 = param1; } public T2 getParam2() { return param2; } public void setParam2(T2 param2) { this.param2 = param2; } }
使用自定義的泛型:
public static void main(String[] args) { //使用自定義的泛型 MyGenerics <Integer, String > myGenerics = new MyGenerics <Integer, String >(); myGenerics.setParam1(1); myGenerics.setParam2("abc"); }
注意:如果一個泛型函數在一個泛型類里面出現,最好避免在方法的泛型和類的泛型中使用同樣的名字來避免混淆。對內部類也是同樣。
2、定義帶泛型方法
在定義帶泛型的方法時,在緊跟可見范圍修飾(例如public)之后的 < >內,指定一個或多個泛型的名字,同時也可以對泛型的取值范圍進行限定,多個泛型之間用,號分隔。
定義完泛型后,可以在定義位置之后的方法的任意地方使用泛型,就像使用普通的類型一樣。
例如:
public <T, S extends T > T testGenericMethodDefine(T t, S s){ ... }
注意:定義帶泛型的方法,主要目的是為了表達多個參數以及返回值之間的關系。
3、通配符
類型的通配聲明:
可以使用“?”通配字元,并使用extends關鍵字限定持有者的類型。
聲明一個類型時進行限定:
例:
public static void main(String[] args) { //使用’?’通配字元,并使用extends關鍵字限定持有者的類型 MyGenerics <? extends Object, ? extends List <String > > myGenerics = null; //創建滿足類型要求的對象 myGenerics = new MyGenerics <String, ArrayList <String > >(); //以下是不符合通配要求的因為HashMap沒有實現List //myGenerics = new MyGenerics <String, HashMap >(); //給泛型的泛型賦值 MyGenerics3 <? extends Object, ? extends List <String > > myGenerics3 = null; myGenerics3 = new MyGenerics3 <Object, List <String > >(); //可以設置為null myGenerics3.setMyGenerics(null); } MyGenerics3 <?, ? > myGenerics3 = null;
等價于:
MyGenerics3 <? extends Object, ? extends Object > myGenerics5 = null;
4、數組范型
可以使用帶范型參數值的類聲明數組,卻不可有創建數組,不能使用new關鍵字創建T類型的對象,而應該傳遞一個具體的參數類型,如下面的將編譯不通過:
MyGenerics <Integer, String > myGenerics = new MyGenerics <T1, T2 >();
例:
public class MyGenerics2 <T > { private T[] param1; public T[] getParam1() { return param1; } public void setParam1(T[] param1) { this.param1 = param1; }
5、使用泛型的好處:
如果使用了泛型,只要代碼在編譯時沒有出現警告信息,就不會遇到運行時的ClassCastException異常。
- 1 回答
- 0 關注
- 1078 瀏覽
添加回答
舉報