簡體   English   中英

為什么 for(T t : this) 起作用,它是什么意思?

[英]Why does for(T t : this) work and what does it mean?

public abstract class MyAbstractSet<T> implements Iterable<T> { 
    ...
    // some code
    ...
    method addElement(T t){
        for (T t : this) {
           //why does this work????
        }
    }
}

我剛剛完成了關於集合和在 Java 中實現IterableIterator類的作業。 作業的全部目的是理解泛型和集合,我想我現在已經掌握了。

然而,在MyAbstractSet<T>之上實現這個類時,我錯誤地輸入了for(T t: this) ,這讓我有些困惑,因為編譯器在編譯它時沒有問題。

我試圖弄清楚這意味着什么,但還不清楚。 就像添加泛型類型<T>使類成為某種列表一樣,for-each-loop 循環遍歷它?

有人可以向我解釋為什么這會起作用以及它的作用是什么,也許還可以發布一個鏈接,在 Java 文檔中對此進行了解釋?

簡單地說,它是這些的組合:

  • 一個增強的 for 循環,我打賭你知道它:

     List<String> listOfStrings = ... for (String string: listOfStrings)
  • T代表泛型類型。 List<T>就是一個很好的例子。

  • this指的是調用方法所在的類的實例。 由於this實現了Iterable<T> ,因此它可能用於增強循環。

因此, for (T t : this)是通過forEach(Consumer<? super T> action)訪問的所有元素的類的相同實例的增強循環。

Java 語言規范,第14.14.2 增強的 for 語句說:

Expression的類型必須是原始類型Iterable的子類型或數組類型(第10.1 節),否則會發生編譯時錯誤。

由於您的this對象實現了Iterable ,因此循環是有效的,並且將通過調用iterator()方法來迭代您的集合的元素。

您的循環被編譯為以下內容,除了iter是一個隱藏變量:

for (Iterator<T> iter = this.iterator(); iter.hasNext(); ) {
    T t = iter.next();
    ...
}

有關如何編譯的完整說明,請參閱上面的 JLS 鏈接。

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM