为什么ArrayList的非静态内部类SubList有一个成员变量“parent”?

时间:2014-02-21 01:54:15

标签: java arraylist sublist

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。页面上的代码与我计算机上的代码相同。

1 个答案:

答案 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字段,就无法跟踪此内容。