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