最近、「The Java Tutorials」第 3 版という本を読みました。写真が示すように、内部クラスの実装について説明しています。
3 番目の段落では、「Stack クラス自体は Iterator インターフェイスを実装すべきではないため、...」と述べています。
Stack クラスが Iterator を実装してはならない理由が見つかりません。与えられた理由は広範ではありません。
説明していただけますか?
最近、「The Java Tutorials」第 3 版という本を読みました。写真が示すように、内部クラスの実装について説明しています。
3 番目の段落では、「Stack クラス自体は Iterator インターフェイスを実装すべきではないため、...」と述べています。
Stack クラスが Iterator を実装してはならない理由が見つかりません。与えられた理由は広範ではありません。
説明していただけますか?
一度に 1 つの反復子しか持てず、スタックを反復処理するとスタックが変更されるため、スタックは Iterator 自体を実装しないでください。
後者の問題については、ネストされたクラスに「currentItem」フィールドがあることに注意してください。このフィールドは「スタック」にある必要があり、next() が呼び出されると変更されます。コレクションを繰り返し処理しても、コレクションは変更されません。
最初の問題はもっと深刻です: 2 人がスタックを反復処理する (または 1 つのメソッドがスタックに対して 2 つの反復子を作成したい) とします。がiterator()
返さthis
れた場合、2 つの反復子は同じものになります。一方を呼び出すnext()
と、もう一方が移動します。混沌。
議論に付け加えると、内部クラスは Stack クラスのプライベート データにアクセスできるため、このようにして、Stack クラスはクライアント プログラマーのオブジェクト、または複数のオブジェクト (反復子) を処理することができます。それでも、これらのオブジェクトはクラスにアクセスでき、コレクションに対して個別の反復を提供できます。