Java 为什么for(T:this)有效?它意味着什么? 公共抽象类MyAbstractSet实现Iterable{ ... //一些代码 ... 方法补充元素(T){ 对于(T:这个){ //为什么这样做???? } } }
我刚刚完成了一个关于集合和在Java中实现Java 为什么for(T:this)有效?它意味着什么? 公共抽象类MyAbstractSet实现Iterable{ ... //一些代码 ... 方法补充元素(T){ 对于(T:这个){ //为什么这样做???? } } },java,for-loop,generics,java-8,iteration,Java,For Loop,Generics,Java 8,Iteration,我刚刚完成了一个关于集合和在Java中实现Iterable和Iterator类的家庭作业。作业的全部目的是理解泛型和集合,我想我现在已经掌握了 然而,在实现上述MyAbstractSet类时,我错误地为(T:this)键入了,这让我有些困惑,因为编译器在编译它时没有遇到任何问题 我试图弄明白这意味着什么,但还不清楚。就像添加泛型类型使类成为某种列表一样,for-each循环会迭代该列表 有人能给我解释一下为什么会这样做,以及它的作用是什么吗?也许还可以在Java文档中发布一个链接来解释这一点?简
Iterable
和Iterator
类的家庭作业。作业的全部目的是理解泛型和集合,我想我现在已经掌握了
然而,在实现上述MyAbstractSet
类时,我错误地为(T:this)键入了,这让我有些困惑,因为编译器在编译它时没有遇到任何问题
我试图弄明白这意味着什么,但还不清楚。就像添加泛型类型
使类成为某种列表一样,for-each循环会迭代该列表
有人能给我解释一下为什么会这样做,以及它的作用是什么吗?也许还可以在Java文档中发布一个链接来解释这一点?简单地说,它是以下内容的组合:
- 一个增强的for循环,我敢打赌你一定知道:
public abstract class MyAbstractSet<T> implements Iterable<T> {
...
// some code
...
method addElement(T t){
for (T t : this) {
//why does this work????
}
}
}
List listOfStrings=。。。
for(字符串:ListOfstring)
T
表示泛型类型<代码>列表
就是一个很好的例子
此
引用调用方法的类的实例。由于此
实现了Iterable
,因此可以在增强循环中使用它因此,
for(T:this)
是通过访问的所有元素的类的同一实例的增强循环。Java语言规范,一节说:
表达式的类型必须是原始类型Iterable
的子类型或数组类型(),否则会发生编译时错误
由于this
对象实现了Iterable
,因此循环是有效的,并且将通过调用iterator()
方法来迭代集合中的元素
除了iter
是一个隐藏变量外,您的循环将编译为以下内容:
List<String> listOfStrings = ...
for (String string: listOfStrings)
for(迭代器iter=this.Iterator();iter.hasNext();){
T=iter.next();
...
}
请参阅上面的JLS链接,以获取编译它的完整说明。因为
此
是一个可编辑的。
for (Iterator<T> iter = this.iterator(); iter.hasNext(); ) {
T t = iter.next();
...
}