这种可打印的迭代方法有什么问题?

时间:2010-06-08 14:41:13

标签: java

private static void printIterable(Iterable iterable) {

    // ERROR: "Type mismatch: cannot convert from element type Object to Iterable"
    for (Iterable i : iterable) { 
        System.out.println(i);
    }

}

编译器在说什么?它是一个Iterable,而不是一个Object。

4 个答案:

答案 0 :(得分:4)

您尝试为Iterable 中的每个iterable执行某些操作。只有在iterableIterable<? extends Iterable>时才会有意义(即它会迭代其他Iterable个对象)。

但是,由于您没有为参数指定类型参数,因此您只知道它将迭代某种对象(即基类型Object适用)。

你应该试试这个:

for (Object o : iterable) { 
    System.out.println(o);
}

如果大声朗读,则会将其标记为“Object中的每个o iterable,请打印o”。用Object替换该句子中的Iterable应说明问题所在。

答案 1 :(得分:3)

您的循环变量不是Iterable类型。它应该具有收集元素的类型。由于Iterable类型的参数没有泛型类型参数,因此您的项可以作为Object实例进行迭代:

for (Object o : iterable) { 
    System.out.println(o);
}

答案 2 :(得分:1)

您正在迭代迭代。所以变量'i'的类型应该是对象而不是Iterable。如果您想在那里使用特定类型,请使用Java Generics。

答案 3 :(得分:0)

正如其他人所说,你试图迭代迭代器,这根本没有意义。您需要在for循环中使用not Iterable,而在示例中使用object。但是更好的解决方案是

private static void printIterable(Iterable<String> iterable) {

    // ERROR: "Type mismatch: cannot convert from element type Object to Iterable"
    for (String i : iterable) { 
        System.out.println(i);
    }
}

(将字符串替换为您想要的对象)