多年來,我看到很多人使用「泛型」這個詞,我真的不知道它的意思,不管它是我最有可能使用它,但只是不知道它被稱爲。 :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泛型:parametricise泛型類型
- 3. Java泛型類型
- 4. Java - 泛型類型
- 5. Java和泛型?
- 6. Java泛型 - #1
- 7. Java JComboBox泛型
- 8. 的Java:泛型
- 9. Java泛型
- 10. Java泛型和「...」
- 11. Java泛型
- 12. 的Java /泛型
- 13. Java類泛型
- 14. 在Java泛型
- 15. 將C#泛型轉換爲Java泛型
- 16. Java泛型與非泛型構造
- 17. Java泛型參數與泛型參數
- 18. 轉換Java泛型到C#泛型
- 19. Java泛型:多個泛型參數?
- 20. Java泛型類和非泛型類
- 21. Java與泛型的泛型編程
- 22. Java泛型 - 錯誤鑄造泛型類
- 23. Java泛型延長
- 24. Java泛型和JNI
- 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