[英]What's wrong with this print-iterable method?
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
每个Iterable
做一些事情。 仅当iterable
Iterable<? extends Iterable>
是iterable
的Iterable<? extends Iterable>
Iterable<? extends Iterable>
(即,它将在其他Iterable
对象上进行迭代)。
但是,由于您没有为参数指定类型参数,因此您只知道它将在某种对象上进行迭代(即,基本类型Object
适用)。
您应该尝试这样:
for (Object o : iterable) {
System.out.println(o);
}
当大声读出它读作“对于每一个Object
o
在iterable
,打印o
”。 用Iterable
替换该句子中的Object
可以说明问题所在。
您的循环变量的类型不是Iterable。 它应该具有收集元素的类型。 由于类型为Iterable的参数没有泛型类型参数,因此您的项目可以作为对象实例进行迭代:
for (Object o : iterable) {
System.out.println(o);
}
您正在遍历可迭代。 因此,变量“ i”的类型应该是不可迭代的对象。 如果要在此处使用特定类型,请使用Java泛型。
正如其他人所说的那样,您试图遍历迭代器,这根本没有任何意义。 您无需在for循环中使用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);
}
}
(用所需的对象替换字符串)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.