ArrayList.removeAll()/retainAll()
Benedict Elliott Smith
belliottsmith at datastax.com
Tue Feb 4 17:00:43 UTC 2014
Hi,
I notice this (or a related issue) has been mentioned
before<http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-June/017663.html>on
this list, but I'm not convinced the correct resolution was reached.
We
are seeing this problem thrown by antlr, but rather than a bug in antlr, as
surmised on the previous exchange, it looks to me that ArrayList is
imposing a new constraint that is neither declared by itself nor
Collection, and is unnecessary. ArrayList happily supports null elements,
so requiring that the provided collection has no null elements is surely a
bug?
I've pasted the two declarations below for ease of reference. Neither
javadocs describe the constraint that is imposed.
ArrayList:
/**
* Removes from this list all of its elements that are contained in the
* specified collection.
*
* @param c collection containing elements to be removed from this list
* @return {@code true} if this list changed as a result of the call
* @throws ClassCastException if the class of an element of this list
* is incompatible with the specified collection
* (<a href="Collection.html#optional-restrictions">optional</a>)
* @throws NullPointerException if this list contains a null element
and the
* specified collection does not permit null elements
* (<a href="Collection.html#optional-restrictions">optional</a>),
* or if the specified collection is null
* @see Collection#contains(Object)
*/
public boolean removeAll(Collection<?> c) {
Objects.requireNonNull(c);
return batchRemove(c, false);
}
Collection:
/**
* Removes all of this collection's elements that are also contained in
the
* specified collection (optional operation). After this call returns,
* this collection will contain no elements in common with the specified
* collection.
*
* @param c collection containing elements to be removed from this
collection
* @return <tt>true</tt> if this collection changed as a result of the
* call
* @throws UnsupportedOperationException if the <tt>removeAll</tt>
method
* is not supported by this collection
* @throws ClassCastException if the types of one or more elements
* in this collection are incompatible with the specified
* collection
* (<a href="#optional-restrictions">optional</a>)
* @throws NullPointerException if this collection contains one or more
* null elements and the specified collection does not support
* null elements
* (<a href="#optional-restrictions">optional</a>),
* or if the specified collection is null
* @see #remove(Object)
* @see #contains(Object)
*/
boolean removeAll(Collection<?> c);
More information about the core-libs-dev
mailing list