2013-06-29 66 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