前言
泛型((Generic)在 JAVA 中有很重要的地位,在物件導向編程及各種設計模式中有非常廣泛的應用。
什麼是泛型?為什麼要使用泛型?
泛型,即「參數化型態」。一提到參數,最熟悉的就是定義方法時形式參數(formal parameter, parameter, 參數),然後調用此方法時傳遞實際參數(actual parameter, arguments, 引數)。那麼參數化型態怎麼理解呢?顧名思義,就是將型態由原來具體的型態參數化,類似於方法中的變數參數,此時型態也定義成形式參數(可以稱之為形式型態參數),然後在使用/調用時傳入具體的型態(實際型態參數)。
泛型的本質是為了參數化型態(在不創建新型態的情況下,通過泛型指定的不同型態來控制形式參數具體限制的型態)。也就是說在泛型使用過程中,操作的數據型態被指定為一個參數,這種參數型態可以用在類別、介面和方法中,分別被稱為泛型類別(Generic Class)、泛型介面(Generic Interface)、泛型方法(Generic Method)。
一、沒有泛型會怎樣?
先看下面這段代碼,我們實現兩個能夠設置點座標的類別,分別設置 Integer 型態的點座標和 Float 類型的點座標:
// 設置 Integer 型態的點座標
class IntegerPoint{
private Integer x ; // 表示 X 座標
private Integer y ; // 表示 Y 座標
public void setX(Integer x){
this.x = x ;
}
public void setY(Integer y){
this.y = y ;
}
public Integer getX(){
return this.x ;
}
public Integer getY(){
return this.y ;
}
}
// 設置 Float 型態的點座標
class FloatPoint{
private Float x ; // 表示 X 座標
private Float y ; // 表示 Y 座標
public void setX(Float x){
this.x = x ;
}
public void setY(Float y){
this.y = y ;
}
public Float getX(){
return this.x ;
}
public Float getY(){
return this.y ;
}
}
那現在有個問題:大家有沒有發現,他們除了變數型態不一樣,一個是 Integer,一個是 Float 以外,其它並沒有什麼區別!那我們能不能合併成一個呢?