Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42366
  • 博文数量: 20
  • 博客积分: 850
  • 博客等级: 准尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-05 22:14
文章分类

全部博文(20)

文章存档

2011年(1)

2009年(12)

2008年(7)

我的朋友

分类: Java

2009-03-19 21:19:17

泛型(Generic)是Java5.0的新机制,主要因为1.4之前集合等类型不明确,每次需要进行强制转换。使用泛型后,会让类型统一起来。

java api中,只要类名后面有标志就可以使用泛型。用来限定对象的类型。
除了异常类型、枚举或者匿名类意外,任何类都可以具有类型参数。

(1)集合中使用类型
List示例: List l = new ArrayList();
这时,List加入了泛型。在add元素进去时候,只能使用String类型。同样,在get()的时候自动就会提取出String。

Set示例:  Collection c = new HashSet();
同样,add只能使用String类型。在使用Iterator迭代时,可以使用如下方式,
for(Iterator i = c.iterator();it.hasNext();){
    String s = it.next();
}
Map示例:
Map m = new HashMap();

(2)自定义的泛型类
public class Person{
    private T secrecy;
    public void setSecrecy(T s){
        this.secrecy = s;
    }
}
这样在使用的时候就可以 Person p = new Person();

推荐使用的泛型名称:
K 映射的键
V 值,内容。
E 元素,例如Vector
T 泛型

(3)类型通配符
泛型中未确定的类型,使得一个泛型类有多种的形态,但是这多种形态之间不存在多态和继承的关系。例如 Vector 并不是 Vector的子类。这样在处理一些方法的时候,可能会使方法的编写过于繁琐,因为要为每一种泛型可能的形态都编写一个重载的方法。这样就引进的了 类型通配符 “?” 。
例如 Vector是任何泛型Vector的父类型。因此一个方法定义为:
public void test(Vector v){..}
这样就可以传递 Vector Vector等多个类型。
但是这里某些方法是禁止使用的,当某些方法需要明确参数的类型时,例如v.add(...)。但是如同remove()这种不需要明确参数的方法,就可以使用。

(4)泛型方法
public class Test{
    public T e(T a,T b){
        if(a.equals(b))
        ...
            ...
    }
}

(5)受限制的类型参数
例如 public class Point
这样对泛型的类型进行了一定的约束,更加的切合实际需要。
限制的类型可以为接口
同时通配符 ? 作为特殊类型,也可以受到限制。例如:Vector
阅读(484) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~