2013-06-29 104 views
-1

我試着在這裏和谷歌周圍環顧四周,但很遺憾沒有發現任何東西。Java在使用相同類型時抱怨不兼容類型

這裏是我的代碼:

class DeleteLists 
{ 
    public static void main(String[] args) 
    { 
     TokenAuth auth = new TokenAuth("xxxxx", "xxxxx"); 
     JKippt jkippt = new JKippt(auth); 

      ClipList[] lists = jkippt.getLists(); 

      for (int i = 0; i <= lists.length - 1; i++) 
      { 
       if (lists[i].isPrivate() == false); 
       { 
        {System.out.println(lists[i].getTitle); 
        jkippt.deleteList(lists[i].getId()); 
       } 
      } 
    } 
} 

當我嘗試編譯它,它輸出這樣的:

DeleteLists.java:18: error: incompatible types 
     ClipList[] lists = jkippt.getLists(); 
           ^
    required: ClipList[] 
    found: Iterator<ClipList> 

這可能很可能是一個非常基本的錯誤,但我究竟在這裏幹什麼錯?

非常感謝您提前! 伊甸園。

+4

什麼是您的getLists()返回 –

+1

請張貼JKippt類代碼 – Bohemian

+1

我的JVM沒有''TokenAuth''JKippt'類ClipList'。我可以在哪裏找到它們?如果你是這些類的創建者,你應該包含他們的代碼,以便我們更容易找到解決方案,或者最終提出改進/更正。 – Pshemo

回答

8

此方法返回一個Iterator

Iterator<ClipList> it = jkippt.getLists(); 
while (it.hasNext()) { 
    ClipList clipList = it.next(); 
    // do stuff with clipList 
} 

決定從一個API方法返回一個Iterator(尤其是一個名叫getLists())是一個奇怪的決定,如果它返回ListCollection(或至少一個Iterable)會更好。如果在那裏的話,你可以這樣使用它:

for (ClipList clipList : jkippt.getLists()) { 
    // do stuff 
} 
+0

我使用了Iterator,因爲服務正在返回分頁結果。在後臺ClipList迭代器遍歷結果頁面的迭代器。 除非在一個方法調用中獲取所有結果頁,否則不可能返回List或Collection。 Iterable可能是一個解決方案,但此解決方案可以隱藏資源分配給用戶(需要通過http的結果頁面)。 方法名稱來自Kippt服務端點,我承認它很醜。 – Fedy2

0

該方法返回一個Iterator,而不是一個數組。走過去的迭代器的元素,你可以使用while循環:

Iterator<ClipList> iter = jkippt.getLists(); 
while (iter.hasNext()) { 
    ClipList list = iter.next(); 
    ... 
} 
+4

對不起,但不是每個人都在用'Iterable'而不是'Iterator'? – Pshemo

+0

你是對的...在那裏,修好了。 – Joni

0

你必須使用一個Iterator循環:

for (Iterator<ClipList> i = jkippt.getLists(); i.hasNext();) { 
    ClipList list = i.next(); 
    if (!list.isPrivate()) { 
     System.out.println(list.getTitle); 
     i.remove(); 
    } 
} 

請注意,你有一個錯誤在你的代碼 - 有一個在if之後出現錯誤分號,這會導致if語句有空塊。

而且,這條線你的可能會拋出ConcurrentModificationException

jkippt.deleteList(list.getId()); 

,所以我把它改成正確的方式通過remove()方法使用迭代刪除。

另請注意,此處更改爲使用if (!list.isPrivate())而不是您的if (list.isPrivate() == false),這是不必要的混亂。

0

如上所述,getLists()返回一個迭代器。你可以用下面的代碼示例將其轉換爲一個ArrayList:

Iterator<String> lists = jkippt.getLists(); 
List<String> result = new ArrayList<String>(); 
while (list.hasNext()) 
    result.add(list.next()); 

這裏result是你的ArrayList。如果您想將其轉換爲數組,我建議您訪問主題ArrayList to array