繁体   English   中英

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

[英]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>iterableIterable<? extends Iterable> Iterable<? extends Iterable> (即,它将在其他Iterable对象上进行迭代)。

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

您应该尝试这样:

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

当大声读出它读作“对于每一个Object oiterable ,打印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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM