I am making a GWT application and have to prevent client code from using null values in collections.
I found an answer but GWT doesn't support Queue
and its implementations as the GWT documentation says.
So, I had to make my own implementation.
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
/**
* This implementation of {@link ArrayList} does not allow to add null values
*
* @author Maxim Dmitriev
*
* @param <E>
*/
public class NonNullArrayList<E> extends ArrayList<E> implements Serializable {
private static final String NULL_VALUES_ARE_PROHIBITED = "Null values are prohibited";
private static final String CLONING_IS_UNSUPPORTED = "Cloning is unsupported. Please support if necessary";
public NonNullArrayList() {
// For serialization. super() is called automatically.
}
public NonNullArrayList(int initialCapacity) {
super(initialCapacity);
}
public NonNullArrayList(Collection<? extends E> c) {
super(c);
if (contains(null)) {
throw new NullPointerException(NULL_VALUES_ARE_PROHIBITED);
}
}
/**
*
*/
private static final long serialVersionUID = 7716772103636691126L;
public boolean add(E e) {
if (e == null) {
throw new NullPointerException(NULL_VALUES_ARE_PROHIBITED);
}
return super.add(e);
};
@Override
public boolean addAll(Collection<? extends E> c) {
if (c.contains(null)) {
throw new NullPointerException(NULL_VALUES_ARE_PROHIBITED);
}
return super.addAll(c);
}
public void add(int index, E element) {
if (element == null) {
throw new NullPointerException(NULL_VALUES_ARE_PROHIBITED);
}
super.add(index, element);
};
@Override
public boolean addAll(int index, Collection<? extends E> c) {
if (c.contains(null)) {
throw new NullPointerException(NULL_VALUES_ARE_PROHIBITED);
}
return super.addAll(index, c);
}
public E set(int index, E element) {
if (element == null) {
throw new NullPointerException(NULL_VALUES_ARE_PROHIBITED);
}
return super.set(index, element);
};
@Override
public Object clone() {
throw new Error(CLONING_IS_UNSUPPORTED);
}
}
Besides I want to prevent code from using the clone()
method because I just don't need it.
Is the implementation good or not?