76 lines
1.9 KiB
Java
76 lines
1.9 KiB
Java
package net.minecraft.core;
|
|
|
|
import com.google.common.collect.Lists;
|
|
import java.util.AbstractList;
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import org.apache.commons.lang3.Validate;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
|
|
public class NonNullList<E> extends AbstractList<E> {
|
|
private final List<E> list;
|
|
@Nullable
|
|
private final E defaultValue;
|
|
|
|
public static <E> NonNullList<E> create() {
|
|
return new NonNullList<>(Lists.<E>newArrayList(), null);
|
|
}
|
|
|
|
public static <E> NonNullList<E> createWithCapacity(int initialCapacity) {
|
|
return new NonNullList<>(Lists.<E>newArrayListWithCapacity(initialCapacity), null);
|
|
}
|
|
|
|
/**
|
|
* Creates a new NonNullList with <i>fixed</i> size and default value. The list will be filled with the default value.
|
|
*/
|
|
public static <E> NonNullList<E> withSize(int size, E defaultValue) {
|
|
Validate.notNull(defaultValue);
|
|
Object[] objects = new Object[size];
|
|
Arrays.fill(objects, defaultValue);
|
|
return new NonNullList<>(Arrays.asList(objects), defaultValue);
|
|
}
|
|
|
|
@SafeVarargs
|
|
public static <E> NonNullList<E> of(E defaultValue, E... elements) {
|
|
return new NonNullList<>(Arrays.asList(elements), defaultValue);
|
|
}
|
|
|
|
protected NonNullList(List<E> list, @Nullable E defaultValue) {
|
|
this.list = list;
|
|
this.defaultValue = defaultValue;
|
|
}
|
|
|
|
@NotNull
|
|
public E get(int i) {
|
|
return (E)this.list.get(i);
|
|
}
|
|
|
|
public E set(int i, E object) {
|
|
Validate.notNull(object);
|
|
return (E)this.list.set(i, object);
|
|
}
|
|
|
|
public void add(int i, E object) {
|
|
Validate.notNull(object);
|
|
this.list.add(i, object);
|
|
}
|
|
|
|
public E remove(int i) {
|
|
return (E)this.list.remove(i);
|
|
}
|
|
|
|
public int size() {
|
|
return this.list.size();
|
|
}
|
|
|
|
public void clear() {
|
|
if (this.defaultValue == null) {
|
|
super.clear();
|
|
} else {
|
|
for (int i = 0; i < this.size(); i++) {
|
|
this.set(i, this.defaultValue);
|
|
}
|
|
}
|
|
}
|
|
}
|