Right, I see that now.
Care must be exercised if this method is used on collections that
do not comply with the general contract for {@code Collection}.
So, what does this mean? Are we catering to incorrect implementations?
> On Feb 13, 2019, at 9:07 PM, Stuart Marks <[email protected]> wrote:
>
> On 2/13/19 7:22 PM, Alan Snyder wrote:
>> If we take this route, how about changing the parameter type to Iterable?
>
> Won't work. Where I've ended up is that we need to iterate over "this"
> collection and, for each element, call contains() on the parameter. The
> AbstractCollection.removeAll() implementation does something like this:
>
> removeAll(Collection<?> c) {
> for (Iterator<?> it = iterator(); it.hasNext();) {
> if (c.contains(it.next())) {
> it.remove();
> }
> }
> }
>
> Since we call contains() on the parameter, it has to be a Collection.
>
> s'marks
>