3
A
回答
6
在運行時,沒有區別:Java泛型通過Type Erasure實現,所以在所有實現中都使用相同的類。
然而,在編譯時,差異是巨大的,因爲它可以讓您避免每次使用對象時進行強制轉換,使代碼看起來更清晰。
考慮這個例子:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
for (Integer n : list) {
System.out.println(n+5);
}
這編譯並運行良好,也容易閱讀。如果你想使用List<Object>
相反,代碼就不會顯得乾淨:
List<Object> list = new ArrayList<Object>();
list.add(1);
list.add(2);
list.add(3);
for (Object o : list) {
// Now an explicit cast is required
Integer n = (Integer)o;
System.out.println(n+5);
}
內部,雖然,兩個代碼段用於其list
對象完全相同的實現。
1
List<T>
被稱爲泛型,因此保證List將始終包含T類型的對象。而另一個不保證對象是相同類型的,實際上你只知道它們是對象。
0
List<T>
是泛型類的名稱。 List<Object>
是它的具體實例。 List<T>
還不是一個類(它是一個通用類,可以創建具體類的模板,但不是可以立即使用的類),List<Object>
是一個類。
+0
這根本沒有意義。 –
0
T是一個類型參數。這意味着其他一些代碼可以聲明某種類型,並且使用該類型參數的類的代碼將在其實現中替換該類型的T。
所以,你可以創建自己的類Foo和聲明包含FOOS作爲列表:
List<Foo> foos = new ArrayList<Foo>();
,你可以調用像
Foo foo = foos.get(0);
方法沒有投,因爲編譯器知道了該列表在foos
對象上的get方法的方法返回類型中用Foo代替T.
相關問題
- 1. 空對象類型和對象有什麼區別?
- 2. 對象類型和字典類型的映射對象有什麼區別
- 3. T&和T * const有什麼區別?
- 4. typeof和當比較對象類型時有什麼區別?
- 5. 對象,*和沒有類型之間的區別是什麼?
- 6. 在oracle中嵌套表和對象類型有什麼區別?
- 7. 類,對象,實體:有什麼區別?
- 8. 抽象類和Mixin有什麼區別?
- 9. 對象和引用有什麼區別?
- 10. 對象和實例有什麼區別?
- 11. 「WSH」和「WScript」對象有什麼區別?
- 12. 對象和變量有什麼區別?
- 13. 數據模型和對象模型有什麼區別?
- 14. Ember.js:對象模型和模型有什麼區別?
- 15. \ s和\ t有什麼區別?
- 16. 通配符和'T'有什麼區別?
- 17. 非泛型IEnumerable和泛型IEnumerable <T>有什麼區別?
- 18. Flex 4中mx/fx/s對象類型有什麼區別?
- 19. 這兩個PHP對象實例化類型有什麼區別?
- 20. 泛型類型和泛型類型定義有什麼區別?
- 21. 有什麼區別?和T在類和方法簽名?
- 22. 將原型設置爲對象和函數有什麼區別?
- 23. I18n:使用't(:test_key)','t('test_key')'和't('。test_key')'有什麼區別?
- 24. Python中的對象和類有什麼區別
- 25. C#中的對象和類之間有什麼區別?
- 26. 類和對象實例有什麼區別?
- 27. Perl中的對象和類之間有什麼區別?
- 28. 繼承時抽象類和非抽象類有什麼區別
- 29. 選項類型和可空類型有什麼區別?
- 30. 有什麼區別擴展類型和類型
T =泛型類型累加器 –
開始閱讀:http://docs.oracle.com/javase/tutorial/java/generics/ –