[英]Java: using iterators in other classes
我在嘗試將公共迭代器放入一個類中以在該類中讀取Map並在其他類中實現此迭代器時遇到了問題。 或者換句話說
我有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!");
}
}
我也有一個testclass,它創建任一類的對象,然后運行receive
方法。
我收到消息“我已經開始!” 但不是“我在工作!”
同時,如果我在任一類中都有兩個迭代器,則打印toString
,則toStrings是相同的。
我也不能簡單地將本來應該在B類中執行的動作移動到A類,因為迭代器有幾種不同的方法,並且在每種方法中用於不同的事情。
我有點難過。 我在語法中缺少什么嗎? 我輸入的內容有誤嗎? 我是否完全搞砸了它應該如何工作? 這是完全不可能的嗎?
嘗試通過如下函數公開迭代器:
public class Giant {
private Map<Item, Integer> myMap = new HashMap<Item, Integer>();
public Iterator<Map.Entry<Item, Integer>> getGiantIterator() {
return myMap.entrySet().iterator();
}
}
並在B類中進行更改:
Iterator<Map.Entry<Item, Integer>> foo = mouse.giantIterator;
至
Iterator<Map.Entry<Item, Integer>> foo = mouse.getGiantIterator();
這樣,直到需要時才創建迭代器。
按照您的編碼方式,在地圖仍然為空時創建了迭代器。 我懷疑這可能是您問題的根源。
您的迭代器是在構造A時構造的,那時Map為空。
創建一個方法getIterator(),以返回最新版本。
如果您有一個迭代器,並且想要各種類來訪問它,則將該變量設置為“ static”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.