说起泛型很多人会想起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异常
- 泛型的定义不限个数,我们可以根据自己的需求合理的定义