1. 程式人生 > 其它 >Java泛型二:自定義泛型類

Java泛型二:自定義泛型類

技術標籤: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)具體為什麼需要自定義泛型類,還不清楚,以前也沒有遇到過,等得到具體業務場景使用時,可能會加深理解