日期:2014-05-20  浏览次数:20696 次

为什么集合不直接继承Iterator,而是用内部类?
在java的集合中,如List,Set,为什么要用迭代器?我看了一下源码,大概是这样的:iterator()方法会返回一个Iterator型的实现,而这个实现是一个中Itr的内部类
Java code

public Iterator<E> iterator() {
    return new Itr();
}

//内部类
private class Itr implements Iterator<E> {
    public boolean hasNext(){
          //……
        }

    public E next() {
          //……
        }

    public void remove() {
          //……
        }
    //other method……
}



如果让AbstractList实现Iterator接口,使用的时候将集合的引用赋值给Iterator型的变量不就可以了吗?
为什么要煞费心机地设计一个内部类?

另外,这几天小弟在看Java编程思想,内部类的那一章,说内部类是用来解决“多重继承”问题的,但这个
问题接口也可以解决吧?内部类独特的地方在哪里呢?哪位兄台有好的例子可以供参考一下?成分感谢!

------解决方案--------------------
http://www.bianceng.cn/Programming/Java/200705/1552.htm

------解决方案--------------------
隐藏Iterator的具体实现
------解决方案--------------------
AbstractList已经是默认实现了Iterable接口了

它带有覆盖方法:

public Iterator<E> iterator() {
return new Itr();
}

至于用内部类实现,我觉得因为某种程度上是它主类独用的,关联度高,可重用度不高。