實際列表的迭代器被實現爲列表類中的內部類。因此,我們可以從內部類引用List的泛型類型。那麼爲什麼迭代器是通用的?如果我們從實際的List中調用一個迭代器,那麼next()方法將使用調用迭代器的List的Generic類型。Java - 爲什麼迭代器需要是通用的?
0
A
回答
0
Iterator接口被設計爲
public interface Iterator<E> {
boolean hasNext();
E next();
void remove();
}
注意next
方法。如果接口不是通用的,它會有什麼樣的返回類型?這將是
Object next();
因此,沒有參數,你最終會得到這樣的代碼:
List<String> list = createSomeList();
String s = (String) list.iterator().next();
注意必要的演員。泛型的要點是無需投射就可以生成代碼;這叫做型安全。使用當前的迭代器接口,你可以做
List<String> list = createSomeList();
String s = list.iterator().next();
1
因爲我們重寫了超類的方法。如果超類沒有提供通用簽名,則不能用自定義對象覆蓋它。
0
並不是所有迭代器都作爲內部類來實現。即使如此,返回迭代器的實例仍將從集合類型(列表,您的情況)中獲取
然而鍵點卻與列表及其調用者之間的契約鏈接。 List/Collection.iterator()應該基於類型參數[無論您是否使用中間變量來存儲迭代器]返回泛型迭代器。
相關問題
- 1. 的Java迭代器 - 爲什麼是通用型可選
- 2. 爲什麼for循環不需要迭代器是可變的?
- 3. 爲什麼我們需要scalaz.stream迭代?
- 4. 什麼是無限迭代器?爲什麼要使用它?
- 5. 爲什麼需要迭代器的構造函數需要元素爲EmplaceConstructible?
- 6. 爲什麼我需要取消引用迭代器?
- 7. 爲什麼std :: generate()和std :: generate_n()需要不同的迭代器?
- 8. 爲什麼std :: remove需要const版本的迭代器?
- 9. 什麼是迭代在Java
- 10. 爲什麼不Boost.Range is_sorted需要前向迭代器?
- 11. 爲什麼std :: sort和partial_sort需要隨機訪問迭代器?
- 12. 什麼是迭代器,C++?
- 13. 什麼是SCARY迭代器?
- 14. 爲什麼這個迭代器是const?
- 15. 需要幫助逐步通過Java迭代器
- 16. 在模板函數中需要什麼類型的迭代器?
- 17. 爲什麼還要寫這樣的迭代器?
- 18. 爲什麼JavaScript中的迭代方法需要(item,index和array)?
- 19. 爲什麼解引用字符串向量迭代器需要括號?
- 20. 爲什麼要爲指定的迭代器返回IEnumerable?
- 21. 爲什麼在自組織映射中需要迭代次數?
- 22. 爲什麼在迭代列表時需要@NonCPS?
- 23. 爲什麼Play的PushEnumerator需要在迭代器完成之前關閉()?
- 24. python迭代器的接口是什麼?
- 25. 使用迭代器需要幫助
- 26. 輸入和輸出迭代器的需求是什麼?
- 27. 爲什麼異常是可迭代的?
- 28. 爲什麼需要編譯Java代碼,但JavaScript代碼不需要
- 29. 帶迭代器的java通用數組
- 30. 爲什麼一個類需要__iter __()來返回一個迭代器?