我正在阅读LinkedList的ListIterator的Java Doc,它被定义为非静态内部类。为什么它不是静态类?不应该在LinkedList的所有实例之间共享此数据结构吗?我很迷惑。感谢。
private class ListItr implements ListIterator<E>{
}
答案 0 :(得分:2)
我认为你对Java中静态和非静态类与静态和非静态成员之间的区别有一点误解:静态类和非静态类之间的区别在于非静态类具有隐式成员持有对外部类的引用,而静态类没有这样的隐式引用。两种内部类都在所有实例之间共享;它是内部类的实例,它们与外部类的实例相关联。
这正是迭代器所需要的:每个迭代器都连接到它迭代的集合的实例,因此通过使内部类非静态来隐式保持这个引用是完全合理的。
答案 1 :(得分:0)
首先,ListItr
不 数据结构,它是一个内部类。 ListIterator
个实例不会自动共享此类的实例,它们不应该!由于内部类ListItr
可以访问其封闭类数据,因此非常适合在数据集合上实现迭代器。静态类 不 具有此级别的访问权限,因此作为迭代器的实现将做出更差的选择。