2017-01-19 43 views
1

下面是Iterables.isEmpty()ref)的源代碼:將Iterables投射到集合是否遍歷所有元素?

public static boolean isEmpty(Iterable<?> iterable) { 
    if (iterable instanceof Collection) { 
     return ((Collection<?>) iterable).isEmpty(); 
    } 
    return !iterable.iterator().hasNext(); 
} 

我在所有元素想知道如果Iterables.isEmpty()方法迭代如果給iterable參數是一種類型的Set,其延伸Collection。鑄造IterableCollection會導致完全迭代嗎?如果是這樣,爲什麼?如果不是,爲什麼不呢? Iterables.isEmpty()is implemented as iterable.iterator().hasNext() for non-Collections

回答

7

如果給iterable

不,我想知道如果Iterables.isEmpty()在所有的元素方法進行迭代。它永遠不會比第一個元素更進一步。

是否鑄造可迭代到集合導致完整的迭代

號鑄造無助於物體,它只是告訴編譯器「相信你」,它可以作爲子類來處理,而不是超類。

JLS Sec 15.6

的鑄造表達...的檢查,在運行時,即一個參考值指的是對象的類是與指定的參考類型或引用類型的列表兼容。