我看到一些代碼使用Object
而不是通配符(?
)作爲泛型類的參數。這導致在客戶端代碼中顯式強制轉換。有什麼好處,分別。取捨這種方法?什麼是Object vs的折衷?在泛型參數?
2
A
回答
6
使用Object
作爲類型參數與使用?
完全不同。見這2種方法:
void frobnicate1(List<?> someList);
void frobnicate2(List<Object> someList);
兩者都將收到一個List
,都將獲得Object
時,他們得到的,而只有List
但frobnicate1
可以用List<String>
甚至List<?>
被調用,frobnicate2
可以元素被List<Object>
(或null
)調用。
請注意,實例化參數化類型不能用通配符類型參數(?
)完成。
所以下面將不起作用:
List<?> someList = new ArrayList<?>();
你將不得不使用Object
(或任何其他非通配符類型),而不是:
List<?> someList = new ArrayList<Object>();
而且不用擔心顯式強制轉換:JVM可以將其優化掉(可能會),因爲任何參考值到Object
的強制轉換總是會成功。
3
我發現它有助於記住這樣說:
名單<對象> =其中,每個元素都被視爲Object
列表實例的列表<> =一個列表,其中每個元素是什麼?視爲特定但未知的子類Object
相關問題
- 1. Hive insert vs Hive Load:什麼是折衷?
- 2. 在這裏做的折衷是什麼? (push vs. Array)
- 3. Python設置使用,返回聯合,折衷類型的折衷
- 4. UIViews太多了嗎?什麼是成本,什麼是折衷?
- 5. 什麼是拳擊和拆箱,什麼是折衷?
- 6. 什麼是在HTMLUnit中禁用CSS的折衷?
- 7. 在「泛型」類型參數之前,「out」是什麼意思?
- 8. 小堆棧邊界的折衷是什麼?
- 9. 折衷課程的數量vs可讀性
- 10. 泛型方法的類型參數是做什麼的?
- 11. Java泛型參數與泛型參數
- 12. 佈局類型之間的折衷
- 13. Hibernate 4泛型:@Suppress警告vs推斷泛型類型參數?
- 14. 泛型:爲什麼我不能將Object作爲我的Collection的參數?
- 15. 術語是什麼一類與泛型類型參數
- 16. 什麼是語法泛型類型參數(在函數類型前)
- 17. 使用鏈表或數組實現BST的性能折衷是什麼?
- 18. VB.NET:使用類型參數vs使用泛型函數?
- 19. C#中空泛型參數<,>的術語是什麼?
- 20. 什麼是在Windows CE 6.0和Windows Mobile 6.1下開發的折衷方案
- 21. 在我的網頁中分割靜態文件 - 什麼是折衷?
- 22. 什麼是在MYSQL表中存儲UUID的各種選項及其折衷?
- 23. 在會話vs數據庫中的用戶數據之間進行折衷?
- 24. 爲什麼在這裏省略泛型類型參數是可以接受的?
- 25. 指向泛型函數的指針類型參數的語法是什麼?
- 26. 爲什麼我需要在泛型類中明確定義泛型參數的泛型類型?
- 27. 泛型參數
- 28. 泛型類型參數不是類型?
- 29. 爲什麼泛型參數「擴展」派生函數中不允許的東西,但泛型返回類型是?
- 30. 泛型的問題(型號參數VS構造)
感謝您的解釋。爲了清楚起見,當我想接受'null'時,我應該使用'frobnicate2'? – 2011-05-05 08:34:45
@ Gabriel:**兩個**版本都會接受'null'。 'frobnicate2'的唯一優點是你可以*添加* List到'List'對象,因爲它被定義爲接受所有'Object's。 – 2011-05-05 08:51:44
再次感謝您,那是我在第一個地方找到的答案。 – 2011-05-05 09:06:07