在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的時候提供了泛型的技術。