說起泛型很多人會想起Map接口,我們來看一下Map的聲明
public interface Map<K,V>
不難看出Map接口和我們之前定義的向量類有相似之處。在類/接口的名稱後面都跟上了一對尖括號,向量類是,Map接口是<K,V>。
那麼我們可以考慮一下泛型的個數是不是也是隨意的呢?
看一下如下代碼:
class Dimen<K,T>{
private K name;
private T x;//向量的x座標
private T y;//向量的y座標
public void setName(K k){
this.name = k;
}
public K getName(){
return this.name;
}
public void setX(T x){
this.x = x;
}
public void setY(T y){
this.y = y;
}
public T getX(){
return this.x;
}
public T getY(){
return this.y;
}
}
這段代碼較之前的Dimen類多了一個name屬性,其類型是泛型K;x和y的類型依舊是泛型T。
那麼爲了檢驗正確性就先把主類寫完。
public class DimenTest{
public static void main(String[]args){
Dimen<String,Integer> dimen = new Dimen<String,Integer>();
dimen.setName("a");
dimen.setX(5);
dimen.setY(5);
System.out.println("向量" + dimen.getName() + "=" + dimen.getX() + "i+" + dimen.getY() + "j");
}
}
經過編譯運行,我們可以得到如下結果:
通過這個例子我們也可以對泛型提出猜想:在泛型定義時,是不是不限個數。
我們可以利用相似的方法來進行驗證這個猜想。
在我們以後的學習或開發中,我們就能夠充分利用泛型的兩個特點:
- 泛型不限類型,可以避免向下轉型的操作,從而避開了ClassCastException異常
- 泛型的定義不限個數,我們可以根據自己的需求合理的定義