多年来,我看到很多人使用“泛型”这个词,但说实话,我不知道它的意思。也许我在使用它,只是不知道它被称为“泛型”。 :p
从http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html获取
泛型提供了一种方式,让你可以告诉编译器集合的类型,以便进行检查。一旦编译器知道了集合的元素类型,就可以检查你是否一致地使用了集合,并且可以在从集合中取出值时插入正确的转换。
这里是一个简单的例子,摘自现有的Collections教程:
// Removes 4-letter words from c. Elements must be strings
static void expurgate(Collection c) {
for (Iterator i = c.iterator(); i.hasNext(); )
if (((String) i.next()).length() == 4)
i.remove();
}
这里是一个使用泛型修改后的相同示例:
// Removes the 4-letter words from c
static void expurgate(Collection<String> c) {
for (Iterator<String> i = c.iterator(); i.hasNext(); )
if (i.next().length() == 4)
i.remove();
}
抱歉直接复制黏贴,但我发现这篇文章比我自己写的好。
编辑以包含评论中提出的一个好观点:
泛型不仅限于向编译器传递集合类型...集合库只是演示它们的好方法。
List<String> lst = new ArrayList<String>();
...
String first = lst.get(0);
对比
List lst = new ArrayList();
...
String first = (String) lst.get(0);
泛型只是Java对参数化多态性的实现。它们的工作方式与其他任何语言中的参数化多态性相同。