Java泛型?

Rif*_*ifk 3 java generics

多年来我看到很多人都使用"泛型"这个词,老实说我不知道​​它意味着什么,不管它是什么我最有可能使用它但只是不知道它被称为那个.:p

Tom*_*and 23

来自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();

}
Run Code Online (Sandbox Code Playgroud)

以下是使用泛型修改的相同示例:

    // 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();

}
Run Code Online (Sandbox Code Playgroud)

对于直接c&p感到抱歉,但我发现这篇文章比我写的更好.

编辑以在评论中包含一个好点:

泛型不仅限于将集合的类型传递给编译器......集合库恰好是演示它们的好方法.

  • 我还建议阅读Effective Java(第2版)的泛型章节 - 可在http://java.sun.com/docs/books/effective/generics.pdf在线获取.如果您正在编写泛型类(而不是仅使用示例中的一个),这将特别有用. (2认同)