这是一个有大小限制的列表,基于番石榴的转发列表
:
一个列表,它将其所有方法调用转发到另一个列表。子类应重写一个或多个方法,以根据装饰器模式根据需要修改后备列表的行为。
番石榴对于所有JDK-5集合类型都有这样的基类。它们中的每一个都实现了相同的目的:使增加价值变得容易,同时将所有默认功能委托给基础集合。
public class LimitingList<E> extends ForwardingList<E> {
private final class LimitingListIterator extends ForwardingListIterator<E> {
private final ListIterator<E> innerListIterator;
private LimitingListIterator(final ListIterator<E> innerListIterator) {
this.innerListIterator = innerListIterator;
}
/**
* {@inheritDoc}
*/
@Override
public void add(final E element) {
if (inner.size() < maxSize)
innerListIterator.add(element);
else
throw new IndexOutOfBoundsException();
}
@Override
protected ListIterator<E> delegate() {
return innerListIterator;
}
}
public LimitingList(final int maxSize) {
this(new ArrayList<E>(), maxSize);
}
public LimitingList(final List<E> inner, final int maxSize) {
super();
this.inner = inner;
this.maxSize = maxSize;
}
@Override
public boolean addAll(final Collection<? extends E> collection) {
boolean changed = false;
for (final E item : collection) {
final boolean tmpChanged = add(item);
changed = changed || tmpChanged;
if (!tmpChanged)
break;
}
return changed;
}
@Override
public boolean add(final E e) {
if (inner.size() < maxSize)
return super.add(e);
else
return false;
}
@Override
public ListIterator<E> listIterator() {
return new LimitingListIterator(inner.listIterator());
}
@Override
public void add(final int index, final E element) {
throw new UnsupportedOperationException();
}
@Override
public boolean addAll(final int index, final Collection<? extends E> elements) {
throw new UnsupportedOperationException();
}
@Override
public ListIterator<E> listIterator(final int index) {
return new LimitingListIterator(inner.listIterator(index));
}
private final int maxSize;
private final List<E> inner;
@Override
protected List<E> delegate() {
return inner;
}
}
它将所有实际功能委托给基础列表,该列表是每个默认值的 ArrayList(单个参数构造函数),但您也可以提供(两个参数构造函数)