クラス内のマップを読み取るためにパブリックイテレータをクラスに配置し、このイテレータを他のクラスに実装しようとすると、問題が発生します。または他の言葉で、
クラスAがあります。クラスAには、このマップを反復するパブリックイテレータを介してアクセスするプライベートHashMapが含まれています。
クラスBもあります。このイテレータをクラスBで実行して、クラスAの内容を読み取ろうとしています。
これは少し回り道のように見えるかもしれませんが(むしろ、多くの回り道)、私の割り当てでは、クラスAのデータシステムを他のクラスに隠すように指定し、パブリックイテレーターを使用してデータにアクセスすることを提案しました。クラスBのメソッドがどのように見えるかの例があります。これは、私ができる限り実行したものです。
しかし、それを機能させることはできません。
これが私が持っているコードのモックアップです。コンパイルしてみましたが、実際のコードとまったく同じように動作します。
// this is class A
public class Giant {
private Map<Item, Integer> myMap = new HashMap<Item, Integer>();
// add a bunch of items to the map, check if they worked fine
public Iterator<Map.Entry<Item, Integer>> giantIterator = myMap.entrySet().iterator();
}
// and this is in class B
public void receive(Giant mouse){
System.out.println("I've started!");
Iterator<Map.Entry<Item, Integer>> foo = mouse.giantIterator;
while (foo.hasNext()) {
Map.Entry<Item, Integer> entry = foo.next();
System.out.println("I'm working!");
}
}
また、いずれかのクラスのオブジェクトを作成してからreceive
メソッドを実行するテストクラスもあります。
「始めました!」というメッセージが表示されます。しかし、「私は働いています!」ではありません。
同時に、どちらかのクラスの2つのイテレータにaを出力させるtoString
場合、toStringsは同じです。
イテレータはいくつかの異なるメソッドにあり、それぞれでわずかに異なるものに使用されるため、クラスBで実行することになっているアクションをクラスAに単純に移動することもできません。
私は少し困惑しています。構文に何かが欠けていますか?何か間違ったものをインポートしていますか?これがどのように機能するかを完全に台無しにしただけですか?これは完全に不可能ですか?