Почему у нестационарного c внутреннего класса SubList ArrayList есть переменная-член «parent»? - PullRequest
0 голосов
/ 19 июня 2020

Я нашел тот же вопрос на Почему у нестационарного c внутреннего класса SubList ArrayList есть переменная-член "parent"? . Ответ был шесть лет go, но у меня все еще есть собственное замешательство. Если в SubList нет «родительского» члена, будет ли работать класс SubList? Мы видим источник ArrayList.SubList

private class SubList extends AbstractList<E> implements RandomAccess {
    private final AbstractList<E> parent;
    private final int parentOffset;
    private final int offset;
    int size

    SubList(Abstract<E> parent, int offset, int fromIndex, int toIndex) {
        this.parent = parent;
        this.parentOffset = fromIndex;
        this.offset = offset + fromIndex;
        this.size = toIndex - fromIndex;
        this.modCount = ArrayList.this.modCount;
    }

    public E set(int index, E e) {
        E oldValue = ArrayList.this.elementData(offset + index);
        Array.this.elementData[offset + index] = e;
    }
    public E get(int index) {
        return ArrayList.this.elementData(offset + index);
    }

    public void add(int index, E e) {
        // ArrayList.this.add(parentOffset + index, e); ?
        parent.add(parentOffset + index, e);
        this.modCount = parent.modCount;
        this.size++;
    }

    public E remove(int index) {
        // E result = Array.this.remove(parentOffset + index); ?
        E result = parent.remove(parentOffset + index);
        this.modCount = parent.modCount;
        this.size--;
        return result;
    }
}

Можем ли мы заменить parent.add, parent.remove на ArrayList.this.add, ArrayList.this.remove? Я думаю, это нормально. Так нужен ли нам «родительский» член-переменная в классе ArrayList.SubList?

...