繁体   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