簡體   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