我正在阅读Java Doc的LinkedList的ListIterator,它被定义为非静态的内部类。为什么它不是一个静态类?不应该在LinkedList的所有实例中共享这个数据结构吗?我很困惑。谢谢。为什么不在LinkedList中定义ListIterator的静态类?
private class ListItr implements ListIterator<E>{
}
我正在阅读Java Doc的LinkedList的ListIterator,它被定义为非静态的内部类。为什么它不是一个静态类?不应该在LinkedList的所有实例中共享这个数据结构吗?我很困惑。谢谢。为什么不在LinkedList中定义ListIterator的静态类?
private class ListItr implements ListIterator<E>{
}
我认为你必须在Java静态和非静态类与静态和非静态成员之间的差异稍有分歧:静态和非静态类之间的区别在于非静态类有一个隐式成员,持有对外部类的引用,而静态类没有这种隐式引用。两种内部类都在所有实例之间共享;它的实例与其外部类的实例关联的内部类。
这正是你想要的迭代器:每个迭代器连接到它迭代的集合的实例,所以通过使内部类非静态地隐含地保存这个引用是非常合理的。
首先,ListItr
是不的数据结构,它的一个内部类。 ListIterator
实例不会自动共享此类的实例,而且它们不应该!作为内部类ListItr
可以访问其封闭的类数据,这对于在数据集合上实现迭代器很有用。一个静态类不是有这个级别的访问,因此会作为一个迭代器的实现更穷的选择。
我尝试在定义中添加“static”,并且它没有报告任何语法错误。在这种情况下,两者会有相同的效果? – user697911 2013-02-25 02:59:32
@ user697911您是否在ListItr类的完整源代码上尝试过它,或者只是在存根上尝试它?如果完整的源代码已经编译,我会感到很惊讶。 – dasblinkenlight 2013-02-25 03:00:52
Eclipse中的完整源代码LinkedList.java。你也可以试试。 – user697911 2013-02-25 03:01:34