2010-02-19 66 views
0
ArrayList array = new ArrayList(); 

Iterator it1 = array.iterator(); 
while (it1.hasNext()){ 
    Myclass temp = it1.myGetterMethod(); 
    System.out.println (temp); 
} 

這就是我想要實現的,但迭代器只返回一個通用對象。當我打電話給Object.getClass()時,班級是Myclass。這是否意味着Iterator不是泛型的,並且我需要在迭代不是Java字符串的對象時擴展Iterator類?爲什麼我不能在Iterator上調用特定的類方法?

回答

7

您沒有創建通用ArrayList。

嘗試

ArrayList<MyClass> array = new ArrayList<MyClass>(); 

Iterator<MyClass> it1 = array.iterator(); 
while (it1.hasNext()) 
{ 
    MyClass temp = it1.myGetterMethod(); 
    System.out.println (temp); 
} 
+0

您需要將'Iterator'泛化到'Iterator ',否?或者直接到'for(MyClass c in array)'。 – 2010-02-19 22:08:17

+0

@Michael Brewer-Davis:它會自動爲您完成,具有泛型的集合將返回相應的迭代器。它需要被正確地聲明。 – Fredrik 2010-02-19 22:12:04

+1

@curlingdude:現在當你的答案被接受時,也許你應該考慮糾正它?您混合使用「MyClass」和「Myclass」,它在「Iterator it1」聲明中完全省略。 – Fredrik 2010-02-19 22:19:54

4

您的代碼會錯過一些重要的事情,但你要做的第一件事是,要麼投用Iterator.next()調用的返回值(在你的代碼失蹤)或使用泛型讓編譯器爲你整理它。

的兩個備選方案會是這個樣子(沒有嘗試編譯他們,但他們應該是基本上是正確的):

隨着投:

ArrayList array = new ArrayList(); 
...  
Iterator it1 = array.iterator(); 
while (it1.hasNext()){ 
    Myclass temp = (Myclass)it1.next() 
    System.out.println (temp); 
} 

有了泛型:

ArrayList<Myclass> array = new ArrayList<Myclass>(); 
...  
Iterator<Myclass> it1 = array.iterator(); 
while (it1.hasNext()){ 
    Myclass temp = it1.next() 
    System.out.println (temp); 
} 

編輯:正如其他人指出的那樣,在大多數情況下使用foreach構造更適合可讀性。我決定只是儘可能少地修改你的初始代碼。 A for構造看起來是這樣的:

ArrayList<Myclass> array = new ArrayList<Myclass>(); 
...  
for(Myclass temp : array){ 
    System.out.println (temp); 
} 
5

更好地使用for語句,因此隱藏了迭代器的複雜性。它更容易閱讀

for (MyClass temp: array) 
    { 
    System.out.println (temp); 
    } 
相關問題