java.util.ArrayList.SubList是java.util.ArrayList的非静态内部类类,这意味着它包含对其封闭类的引用。我们可以使用ArrayList.this访问java.util.ArrayList的成员。但是java.util.ArrayList.SubList也有一个成员“parent”,它也是对java.util.ArrayList.SubList的封闭类的引用。为什么需要“父”成员变量或为什么不将java.util.ArrayList.SubList声明为静态内部类?
我的jdk是最新版本,我在google上搜索了java.util.ArrayList的最新源代码。我得到以下链接: http://www.docjar.com/html/api/java/util/ArrayList.java.html。页面上的代码与我计算机上的代码相同。
答案 0 :(得分:3)
您在评论中的结论是正确的。 SubList
需要parent
字段,因为SubList
的子列表使用SubList
作为父级 - 在这种情况下,封闭式ArrayList
不是父级。特别是ArrayList.SubList.subList()的来源是:
public List<E> subList(int fromIndex, int toIndex) {
subListRangeCheck(fromIndex, toIndex, size);
return new SubList(this, offset, fromIndex, toIndex);
}
请注意,this
(a SubList
)作为父参数传递给新SubList
。
如果没有明确的parent
字段,就无法跟踪此内容。