Java在使用相同类型时抱怨不兼容的类型

时间:2013-06-29 14:38:22

标签: 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>

这很可能是一个非常基本的错误,但我在这里做错了什么?

非常感谢您提前!     伊甸。

5 个答案:

答案 0 :(得分:8)

此方法返回Iterator

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

决定从API方法(特别是名为Iterator的方法)返回getLists()是一个奇怪的决定,如果它返回List或{{1}会更好(或至少Collection)。如果情况如此,可以使用它:

Iterable

答案 1 :(得分:1)

getLists()方法返回IteratorClipList个元素。 库项目页面中有更多示例:https://code.google.com/p/jkippt/

免责声明:我是图书馆的作者。

答案 2 :(得分:0)

该方法返回Iterator,而不是数组。要遍历迭代器的元素,可以使用while循环:

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

答案 3 :(得分: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),这会造成不必要的混乱。

答案 4 :(得分: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