为什么java Iterator接口应该实现为内部类?

Zac*_*ery 9 java iterator inner-classes

我最近读了一本书"The Java Tutorials"第3版.它如图所示讨论了内部类的实现.

在第3段中,它说"Stack类本身不应该实现Iterator接口,因为......".

我找不到Stack类不应该实现Iterator的任何原因.给出的理由不是透彻的.

你能解释一下吗?

内心阶级 内心阶级

Jon*_*eet 9

从根本上说,一个迭代器是有状态的-它需要知道在那里它在集合中指出.这不属于集合本身的一部分 - 给出的解释是正确的......完全有可能有两个独立的迭代器对象,遍历同一个集合对象.如果集合本身实现了Iterator接口,您将如何建模?这是可能的(例如,创建一个新的集合实例,而这个实例又会对原始集合进行引用),但它真的很难看.

这里有一些不同的问题:

  • 数据的收集
  • 位于集合中的光标

单独关注=>单独的类.

说服自己的最简单方法可能是尝试实现自己的集合 - 然后有多个迭代器.例如,您可能想尝试:

List<String> foo = new MyListImplementation<String>();
foo.add("a");
foo.add("b");

// The enhanced for loop uses Iterable/Iterator for non-arrays
for (String x : foo) {
    for (String y : foo) {
        System.out.println(x + " " + y);
    }
}
Run Code Online (Sandbox Code Playgroud)

应该打印出来:

a a
a b
b a
b b
Run Code Online (Sandbox Code Playgroud)

尝试无需两类实现它,看你怎么办,轴承的考虑分离关注.