List<E> (int fromIndex, int toIndex) { final List<E> subList = super.subList(fromIndex, toIndex); return new AbstractList<E>() { @Override public @NotNull E get(int index) { return subList.get(index); } @Override public int size() { return subList.size(); } @Override public boolean add(@NotNull E e) { return subList.add(e); } @Override public E set(int index, @NotNull E element) { return subList.set(index, element); } @Override public void add(int index, @NotNull E element) { subList.add(index, element); } @Override public boolean addAll(int index, Collection<? extends E> c) { checkNotNullCollection(c); return subList.addAll(index, c); } @Override public @NotNull List<E> subList(int fromIndex, int toIndex) { return subList.subList(fromIndex, toIndex); } @Override public boolean addAll(@NotNull Collection<? extends E> c) { checkNotNullCollection(c); return subList.addAll(c); } }; }