尽管听起来很诱人,但我建议不要扩展ArrayList
或任何其他List
实现,因为那样您将限制自己只使用一种类型的列表。如果下次你想限制 aLinkedList
而不是a 会发生ArrayList
什么?你也要延长LinkedList
吗?如果你想限制,基本上,任意实现会发生List
什么?
您正在寻找的东西已经存在。您可以使用 Commons Collections 并使用谓词包装列表:
class SizePredicate implements Predicate {
private List list;
private int maxSize;
public SizePredicate(List l, int size) {
list = l;
maxSize = size;
}
public boolean evaluate(Object obj) {
if (list.size() >= maxSize) {
throw new IllegalStateException("Your message here");
}
list.add(obj);
}
}
...
List list = new LinkedList(); // Or, really, any implementation of list.
List maxList = ListUtils.predicatedList(list, new SizePredicate(list, 50));
使用上面的设计,您可以使用相同的Predicate
实例来限制任何类型的列表。您还可以扩展它以处理任何类型的集合...
... 无需扩展任何 JDK 类。