9

最近、「The Java Tutorials」第 3 版という本を読みました。写真が示すように、内部クラスの実装について説明しています。

3 番目の段落では、「Stack クラス自体は Iterator インターフェイスを実装すべきではないため、...」と述べています。

Stack クラスが Iterator を実装してはならない理由が見つかりません。与えられた理由は広範ではありません。

説明していただけますか?

内部クラス 内部クラス

4

5 に答える 5

4

一度に 1 つの反復子しか持てず、スタックを反復処理するとスタックが変更されるため、スタックは Iterator 自体を実装しないでください。

後者の問題については、ネストされたクラスに「currentItem」フィールドがあることに注意してください。このフィールドは「スタック」にある必要があり、next() が呼び出されると変更されます。コレクションを繰り返し処理しても、コレクションは変更されません。

最初の問題はもっと深刻です: 2 人がスタックを反復処理する (または 1 つのメソッドがスタックに対して 2 つの反復子を作成したい) とします。がiterator()返さthisれた場合、2 つの反復子は同じものになります。一方を呼び出すnext()と、もう一方が移動します。混沌。

于 2013-04-18T16:58:02.967 に答える
0

議論に付け加えると、内部クラスは Stack クラスのプライベート データにアクセスできるため、このようにして、Stack クラスはクライアント プログラマーのオブジェクト、または複数のオブジェクト (反復子) を処理することができます。それでも、これらのオブジェクトはクラスにアクセスでき、コレクションに対して個別の反復を提供できます。

于 2014-03-31T21:10:30.807 に答える