尽管听起来很诱人,但我建议不要扩展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 类。