多年来,我看到很多人使用“泛型”这个词,我真的不知道它的意思,不管它是我最有可能使用它,但只是不知道它被称为。 :PJava泛型?
Java泛型?
回答
从http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html
泛型为您提供了一个集合的类型传达给编译器,它可以检查的方式。一旦编译器知道了集合的元素类型,编译器就可以检查你是否一直使用这个集合,并且可以将正确的强制类型转换为从集合中取出的值。
这里是从现有的类别教程截取的简单的例子:
// 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();
}
对不起,直接但我发现这写起来比我写的东西要好。
编辑在意见做了一个很好的点:
泛型不限于 通信的集合 的编译器类型... 库刚刚发生的收藏是一个好方法 来演示它们。
+1以获得与文档链接的完整全面的答案。 – 2009-08-19 18:40:45
我还建议阅读Effective Java(第二版)的泛型章节 - 可以在http://java.sun.com/docs/books/effective/generics.pdf上在线获得。如果您正在编写泛型类(而不是像示例中那样只使用泛型类),这将特别有用。 – 2009-08-19 18:50:13
@Kathy,+1好链接 – 2009-08-19 18:53:28
泛型只是Java的参数化多态性的实现。它们的工作方式与其他语言中的Parametric Polymorphism类似。
不完全。在Java中,泛型是通过类型擦除来实现的。换句话说,它们只是syntally sugar,根本不会改变底层的字节码。这与例如C++或C#中的泛型非常不同,其中参数化类型实际上是不同的类型。 – 2009-08-19 20:34:10
我试图添加“...只是更糟和更糟“,但我认为这样做并不公平,但Java泛型是由Phil Wadler等人设计的,他也参与了Haskell的设计,该设计可能具有最全面的实现参数多态性。 – 2009-08-19 20:37:57
它基本上归结为你必须减少的次数。 ;-)
List<String> lst = new ArrayList<String>();
...
String first = lst.get(0);
与
List lst = new ArrayList();
...
String first = (String) lst.get(0);
- 1. Java - 泛型类型
- 2. Java类泛型
- 3. Java和泛型?
- 4. Java泛型 - #1
- 5. Java泛型
- 6. Java泛型和“...”
- 7. Java泛型参数与泛型参数
- 8. Java泛型 - 错误铸造泛型类
- 9. Java泛型:多个泛型参数?
- 10. Java与泛型的泛型编程
- 11. 关于Java泛型
- 12. JPA与Java泛型
- 13. Java编程泛型
- 14. 泛型Java超级
- 15. Java泛型帮助
- 16. Java泛型问题
- 17. Java泛型警告
- 18. Java泛型问题
- 19. C#vs Java泛型
- 20. Java泛型问题
- 21. Java泛型混乱
- 22. Java泛型问题
- 23. 误解Java泛型
- 24. Java和泛型类
- 25. Java泛型捕获
- 26. Java泛型比较
- 27. Java泛型继承
- 28. 的Java和泛型
- 29. Java泛型语法
- 30. Java泛型难题
不仅是一个真正的问题,但http://stackoverflow.com/questions/490091/java-generics和其他许多人的真实副本。 – 2009-08-20 00:33:54