魅力的に聞こえるかもしれませんが、拡張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 クラスを拡張する必要はありません。