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。
答案 0 :(得分:4)
您尝试为Iterable
中的每个iterable
执行某些操作。只有在iterable
为Iterable<? 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);
}
}
(将字符串替换为您想要的对象)