Java の Iterator が Iterable ではないのはなぜですか? 質問する

Java の Iterator が Iterable ではないのはなぜですか? 質問する

なぜIteratorインターフェースが拡張されないのですかIterable?

メソッドはiterator()単に を返すこともできますthis

これは意図的なものでしょうか、それとも Java の設計者の単なる見落としでしょうか?

次のようにイテレータ付きの for-each ループを使用できると便利です。

for(Object o : someContainer.listSomeObjects()) {
    ....
}

where はlistSomeObjects()イテレータを返します。

ベストアンサー1

Iterable.iterator()イテレータは状態を持ちます。2回呼び出すと、独立した反復子 - 少なくともほとんどの反復可能オブジェクトではそうです。明らかに、あなたのシナリオではそうではありません。

たとえば、通常は次のように記述できます。

public void iterateOver(Iterable<String> strings)
{
    for (String x : strings)
    {
         System.out.println(x);
    }
    for (String x : strings)
    {
         System.out.println(x);
    }
}

これにより、コレクションが 2 回印刷されるはずですが、このスキームでは、2 番目のループは常に即座に終了します。

おすすめ記事