[英]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.