2

私は、イテレータがIDisposableインターフェイスを実装するC#のバックグラウンドを持っています。自動的に閉じる同様のインターフェースを実装するJavaのイテレーターはありますか?

4

4 に答える 4

7

Java の Iterator は、オブジェクトのコレクションを繰り返し処理するための単なる抽象化です。基礎となるデータ構造が反復後に何らかのクリーンアップを必要とする場合 (ファイルを閉じるなど)、その基礎となるオブジェクトへの参照を保持して、それを「破棄」するために必要なことは何でもできるようにする必要があります。

于 2012-08-20T10:48:41.750 に答える
4

Java 7では、AutoCloseableを実装する独自のイテレータ(またはそのデコレータ)を作成できます。次に、それをtryブロックで使用できます。

try ( Iterator<MyObject> it = new MyAutoCloseableIterator(list) ) {
    while (it.hasNext()) {
       MyObject obj = it.next();
    }
}

tryブロックの最後で、IteratorがAutoCloseableインターフェースを実装している場合、「。close()」メソッドが自動的に呼び出されます。

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

ただし、組み込みのイテレータ(通常はコレクションの内部クラスであるため、公開されていない)がこのインターフェイスを実装しているとは思いません。

もう1つのオプションは、(再び)独自のイテレータをコーディングし、「。hasNext()」メソッドがfalseを返したときにリソースを閉じることです。

于 2012-08-20T12:36:33.457 に答える
1

これはIteratorによって提供される API です

メソッドの概要

boolean hasNext()
反復にさらに要素がある場合は true を返します。E next()
繰り返しの次の要素を返します。void remove()
基礎となるコレクションから、反復子によって返された最後の要素を削除します (オプションの操作)。

Enumerationこれは、Java コレクション フレームワークで置き換えることを意図しており、コレクションを反復処理するために使用されています。Iteratorデザインパターンに基づいています。
その目的はまさに提供されるものです。つまり反復。closeなどとは何の関係もありません。スキャナ
など のイテレータ インターフェイスを実装するクラスがこれを提供する場合、これはAPI の一部です。イテレータのアスペクト/インターフェースとは無関係closeScanner

于 2012-08-20T10:58:16.623 に答える
1

Java ではIterator、インターフェイスそのものです。そして、それには方法がありませんclose()

于 2012-08-20T10:45:30.593 に答える