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

时间:2013-02-28 06:35:01

标签: java

我遇到了一些问题,试图将一个公共迭代器放在一个类中来读取类中的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类,因为迭代器有几种不同的方法,并且用于每种方法稍微不同的东西。

我有点难过。我是否遗漏了语法中的内容?我输错了什么?我是否完全搞砸了它应该如何工作?这只是不可能吗?

3 个答案:

答案 0 :(得分:3)

尝试通过以下函数公开迭代器:

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();

这样,在需要之前不会创建迭代器。

编码它的方式是在地图仍为空时创建迭代器。我怀疑这可能是你问题的根源。

答案 1 :(得分:2)

构造A时构造迭代器,此时Map为空。

创建一个返回最新版本的方法getIterator()。

答案 2 :(得分:0)

如果你有一个迭代器,并且你想要各种类来访问它,那么将该变量设置为“static”。