【问题标题】:Iterating over "this" in Java:在 Java 中迭代“this”:
【发布时间】:2014-07-30 01:48:22
【问题描述】:

我试图了解以下迭代是如何工作的,换句话说,我们如何迭代 this(我已经在其他人的程序中看到了这个实现)。方法getEl 是实现Iterable 的类C 的一部分。类C 本身没有任何A 类型的容器,但有一个A 类型的私有变量。另一方面,A 类具有可迭代容器(A 类型的集合和另一种类型D 的集合)。

public void getEl() {
    for(A el : this) {
       //do something
    }
}

有人可以帮我理解这里发生了什么吗?

【问题讨论】:

标签: java for-loop iteration this


【解决方案1】:

如果this 也实现了Iterable<T>,您可以迭代this(无论它是什么类型)。

【讨论】:

    【解决方案2】:

    C 类实现Iterable<A>,其中包含返回Iterator<A> 的方法iterator()

    您可以在任何实现 Iterable 的对象上使用增强的 for 循环。

    相当于:

    Iterator<A> iter = this.iterator();
    while (iter.hasNext()) {
        A el = iter.next();
        ...
    }
    

    【讨论】:

      【解决方案3】:

      for ( : ) 只是在给定对象上调用iterator() 的语法糖,并使用返回的迭代器对象遍历一组元素(这完全由所述迭代器的实现决定)。由于this 是实现Iterable 的类的实例,因此您可以查看它的iterator() 方法。

      大多数情况下,看到这里使用this 会让人感到困惑。然而,

       C foo = this;
       for (A el : foo) {}
      

      是一样的。

      【讨论】:

        猜你喜欢
        • 2016-02-17
        • 1970-01-01
        • 2021-08-12
        • 2018-12-23
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-31
        • 2013-08-19
        相关资源
        最近更新 更多