回答
這是相同的所有通用的和原始類型:
Class // An unknown class (raw type)
Class<?> // An unknown class (generic version)
Class<String> // The String class
在這種特殊情況下有Class
和Class<?>
之間沒有太大的實際差異,因爲它們都代表一個未知的類。根據現有的聲明,編譯器可以要求泛型類型而不是原始類型。
但:自Java 1.5以來,您應該儘可能使用通用表單。 Class<?>
明確指出你的意思是「未知類」,Class<String>
cleary指出你的意思是String
類。原料Class
可能意味着均爲。
最後它對編譯器沒有什麼區別,但它使代碼的意圖更易於理解和維護。
類javadoc:
類型參數:
T
- 通過此Class
對象建模的類的類型。例如,String.class
的類型是Class<String>
。如果正在建模的類未知,則使用Class<?>
。
不帶類型參數使用Class
類似於使用任何通用類(Map
,List
等),而不類型參數 - 無論它是一個預1.5遺留使用或它只是一個的代碼,不會段不關心未經檢查的類型轉換。
類<?>
表明您有意編寫不瞭解或關心您正在處理的類的Java 5級代碼。離開它使得它看起來像舊的代碼或由尚未學習泛型的人編寫的代碼。
「它看起來像舊的代碼或由尚未學習泛型的人編寫的代碼。」這是一個正確的說法。類(發音爲「未知類」),即類型匹配任何內容的類。由於顯而易見的原因,它被稱爲通配符類型。
例如:
public void drawAll(List<Shape> shapes) {
for (Shape s: shapes) {
s.draw(this);
}
}
類型的規則說,drawAll()只能呼籲的正是Shape
列表:它不能,例如,被稱爲上,也就是說,一個List<Circle>
。這是不幸的,因爲所有的方法都是從列表中讀取形狀,所以它可以在List<Circle>
上調用。
我們真正想要的是該方法接受任何形狀的列表。
public void drawAll (List <? extends Shape> shapes) {
}
閱讀更多:http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html
- 1. Java中的類<?>和類<Object>之間的區別
- 2. <%! %>與<% %>之間的區別
- 3. <s:Line>和graphics.lineTo()之間的區別
- 4. APIView類和viewsets類之間的區別?
- 5. Pattern類和Matcher類之間的區別
- 6. <tiles:add>和<tiles:put> struts之間的區別是什麼?
- 7. <input type ='button'/>和<input type ='submit'/>之間的區別
- 8. ArrayList <String>和ArrayList <>之間的區別?
- 9. 懶惰<T>和LazyInit之間的區別<T>
- 10. <objectAnimator>和ValueAnimator又名<animator>之間的區別?
- 11. Apache OFBiz:<entity-condition>和<entity-and>之間的區別?
- 12. 列表<Integer>和List <?之間的區別super Integer>
- 13. Symfony在<ModelName> .class.php和<ModelName>之間的區別Table.class.php
- 14. React-Router V4 - <Match>和<Route>之間的區別
- 15. 「Convert.ToString(Nullable <int>)」和「Nullable <int> .ToString()」之間的區別?
- 16. 列表<T>和列表<object>之間的區別?
- 17. SPFile和PublishingPage類別之間的區別
- 18. <input type =「button」/>和<button>之間有什麼區別?
- 19. 如何<expr>和非<expr>映射之間區別?
- 20. <class name>之間的區別。 <var name>和自我。 <var name>在python類
- 21. 超類和超類型之間的區別以及子類和子類型之間的區別
- 22. xhtml在<img .... />和<img ...>之間的區別</img>?
- 23. <extends Comparable>和<extends Comparable < T >>之間的區別?
- 24. Ruby中+和<<之間的區別
- 25. java類和jar之間的區別
- 26. Smarty和SmartyBC類之間的區別
- 27. MustInherit和抽象類之間的區別
- 28. 結構和類之間的區別?
- 29. BrowseFragment和BrowseSupportFragment類之間的區別?
- 30. SoundEffect和SoundEffectInstance類之間的區別
應該避免Class類儘可能... – 2009-06-17 13:53:41