ImmutableList.java
package net.florianschoppmann.java.reflect;
import javax.annotation.Nullable;
import java.util.AbstractList;
import java.util.List;
final class ImmutableList<E> extends AbstractList<E> {
private static final ImmutableList<?> EMPTY_LIST = new ImmutableList<>(new Object[0]);
private final Object[] array;
private ImmutableList(Object[] array) {
this.array = array;
}
static <E> ImmutableList<E> copyOf(List<E> original) {
if (original instanceof ImmutableList<?>) {
return (ImmutableList<E>) original;
} else {
return new ImmutableList<>(original.toArray(new Object[original.size()]));
}
}
@SuppressWarnings("unchecked")
static <E> ImmutableList<E> emptyList() {
return (ImmutableList<E>) EMPTY_LIST;
}
@Override
@Nullable
@SuppressWarnings("unchecked")
public E get(int index) {
return (E) array[index];
}
@Override
public int size() {
return array.length;
}
}