Why isn't Collection.remove(Object o) generic?
Collection<E> could have
boolean remove(E o);
Then, when you accidentally try to remove (for example)
Set<String> instead of each individual String from a
Collection<String>, it would be a compile time error instead of a debugging problem later.