ArrayList.removeAll()/retainAll()
Benedict Elliott Smith
belliottsmith at datastax.com
Tue Feb 4 17:28:51 UTC 2014
Ah. I'm a hasty idiot.
If you could all pretend I never sent that email, that would be great.
On 4 February 2014 17:22, Louis Wasserman <wasserman.louis at gmail.com> wrote:
> I don't follow. It looks like ArrayList is throwing an exception on
> removeAll(null) -- perfectly valid, in the spec -- not throwing an
> exception when the collection contains null.
>
> Louis Wasserman
> wasserman.louis at gmail.com
> http://profiles.google.com/wasserman.louis
>
>
> On Tue, Feb 4, 2014 at 9:00 AM, Benedict Elliott Smith <
> belliottsmith at datastax.com> wrote:
>
>> 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