魅力的に聞こえるかもしれませんが、拡張ArrayListやその他のList実装は行わないことをお勧めします。1 種類のリストのみを使用するように制限することになるからです。次回LinkedList、 ではなくを制限したい場合はどうなり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 クラスを拡張する必要はありません。