泛型的出現

在Java語言中,爲了方便接收參數類型的統一,我們可以選用Object類。利用此類對象可以接收所有數據類型(包括基本數據類型和引用數據類型)。但是由於Object類描述的範圍太大,所以在實際操作中就會出現傳入數據類型錯誤,從而拋出ClassCastException異常。
我們可以設計一個表示平面向量的類,這裏面我們需要保存向量的x座標和y座標。對於座標可能會出現三種情況:

  • 整型:x=10,y=0

  • 浮點型:x=10.1,y=10.1

  • 字符串型:x=5i,y=7j
    因此在編寫Dimen類的時候我們可以採用Object類來定義變量。主要依靠以下原理。

  • 整型:int→可以包裝成Integer類對象→自動向上轉型爲Object類對象

  • 浮點型:double→可以包裝成Double類對象→自動向上轉型爲Object類對象

  • 字符串型:String→自動向上轉型爲Object類對象
    具體代碼如下:

class Dimen{
	private Object x;//向量的x座標
	private Object y;//向量的y座標
	public void setX(Object x){
		this.x = x;		
	}
	public void setY(Object y){
		this.y = y;		
	}	
	public Object getX(){
		return this.x;
	}
	public Object getY(){
		return this.y;
	}
}

public class DimenTest{
	public static void main(String[]args){
		Dimen dimen = new Dimen();
		//給成員變量賦值
		dimen.setX(5);
		dimen.setY(7);
		//獲取成員變量,由於getger的返回值類型是Object,
		//所以需要使用向下轉型
		int x = (Integer)dimen.getX();
		int y = (Integer)dimen.getY();
		System.out.println("該向量爲:" + x + "i" + "+" + y + "j");
	}
}

但是如果使用者沒有按照正常的套路來,如下面這段代碼:

class Dimen{
	private Object x;//向量的x座標
	private Object y;//向量的y座標
	public void setX(Object x){
		this.x = x;		
	}
	public void setY(Object y){
		this.y = y;		
	}	
	public Object getX(){
		return this.x;
	}
	public Object getY(){
		return this.y;
	}
}

public class DimenTest{
	public static void main(String[]args){
		Dimen dimen = new Dimen();
		
		dimen.setX(5);
		//這裏使用了字符串,而向下轉型時依然使用的時Integer
		dimen.setY("7j");
		
		int x = (Integer)dimen.getX();
		int y = (Integer)dimen.getY();
		System.out.println("該向量爲:" + x + "i" + "+" + y + "j");
	}
}

這段代碼在編譯時不會出現任何警告或異常
在這裏插入圖片描述
但是當執行時,就會出現ClassCastException異常,導致程序不能正常運行。
在這裏插入圖片描述
爲了避免在編譯時沒有任何的警告出現,但是在運行時卻會拋出異常的情況出現,jdk從1.5的時候提供了泛型的技術。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章