簡體   English   中英

Java:在其他類中使用迭代器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM