ImmutableList<E> (int fromIndex, int toIndex) { // optimization: do not excessively nest SubLists one into the other if (this instanceof SubList) { List<? extends E> original = ((SubList<? extends E>)this).l; int originalOffset = ((SubList<?>)this).offset; return new SubList<>(original, fromIndex + originalOffset, toIndex + originalOffset); } return new SubList<>(this, fromIndex, toIndex); }