Java泛型二:自定義泛型類
阿新 • • 發佈:2020-12-07
技術標籤:Java
可以發現形如:ArrayList<String> list = new ArrayList<String>();
或者ArrayList<Integer> list = new ArrayList<Integer>();
或者ArrayList<Cat> list = new ArrayList<Cat>();
ArrayList(這個類的功能就是儲存資料)是一個類,這個類後面的<>中可以新增任意的型別;ArrayList就是一個泛型類,通過ArrayList的原始碼發現,在定義ArrayList類的時候,其引數使用了E,即並不確定該類到底儲存什麼樣型別的資料,,用了E暫時佔著這個坑,做一個虛假的代表,表示ArrayList可以儲存E型別的資料或E的子類型別的資料。
通過ArrayList這個泛型類的定義,可以結合E這個佔坑的魔法字元,構建自己的泛型類。
1.NumGeneric類使用了<T>這種形式,表示類中的T可以代表任意型別的資料,從而使得該類為泛型類。這個類中的public T num;中T到底是什麼型別的資料暫不確定,等到具體使用的時候,給他賦什麼型別的資料,這個型別的資料就會替換掉T這個佔坑符。
自然,不同於ArrayList類,NumGeneric類的功能並不是儲存資料,但該類廣泛的資料型別也體現了泛型類的特點。
public class NumGeneric<T>{ public T num; public T getNum(){ return num; } public void setNum(T num){ this.num = num; } // 測試 public static void main(String[] aegs){ NumGeneric<Integer> intNum = new NumGeneric<Integer>(); intNum.setNum(10); System.out.println(intNum.getNum()); NumGeneric<Float> floatNum = new NumGeneric<Float>(); floatNum.setNum(5.7f); System.out.println(floatNum.getNum()); } }
2.NumGenericTwo類,演示的是兩個 <T,X>的形式。
public class NumGenericTwo<T,X> { private T num1; private X num2; public void genNum(T num1,X num2){ this.num1 = num1; this.num2 = num2; } public T getNum1() { return num1; } public void setNum1(T num1) { this.num1 = num1; } public X getNum2() { return num2; } public void setNum2(X num2) { this.num2 = num2; } // 測試 public static void main(String[]args){ NumGenericTwo<Integer,Float> numObj = new NumGenericTwo<>(); numObj.genNum(25, 6.8f); System.out.println(numObj.getNum1()+" "+numObj.getNum2()); } }
注:
(1)具體為什麼需要自定義泛型類,還不清楚,以前也沒有遇到過,等得到具體業務場景使用時,可能會加深理解;