[英]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 中實現Iterable
和Iterator
類的作業。 作業的全部目的是理解泛型和集合,我想我現在已經掌握了。
然而,在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.