Un inconvénient de Don de l'approche est qu'elle s'étend de l' ArrayList
. Qui peut être assez bon pour l'instant, mais ce qui se passe lorsque vous souhaitez utiliser un autre List
mise en œuvre? Vous pourriez faire un NoNullsLinkedList
et NoNullsCopyOnWriteArrayList
,, etc, mais ensuite vous vous retrouvez avec un tas de peu de classes qui diffèrent seulement dans leur extends
de la clause. Il peut être préférable de créer un List
wrapper qui n'accepte pas les valeurs null. Par exemple:
public class NonNullList<E> extends AbstractList<E> {
private final List<E> delegate;
public NonNullList(List<E> delegate) {
this.delegate = delegate;
}
@Override
public E get(int index) {
return delegate.get( index );
}
@Override
public int size() {
return delegate.size();
}
@Override
public E set(int index, E element) {
return delegate.set( index, element );
}
@Override
public void add(int index, E element) {
if( element != null ) {
delegate.add( index, element );
}
}
@Override
public E remove(int index) {
return delegate.remove( index );
}
}
C'est plus de code, mais maintenant, vous avez la possibilité de choisir un List
mise en œuvre lorsque vous créez l'objet.
Un problème possible est que vous pouvez toujours insérer null
s dans le sous-jacent List
objet. Ne l'approche n'a pas la même limitation.