Почему не Collection.remove(Object o) generic?
Кажется, что Collection<E> может иметь boolean remove(E o);
Затем, когда вы случайно попытаетесь удалить (например) Set<String> вместо каждой отдельной строки из Collection<String>, это будет ошибкой времени компиляции вместо проблемы с отладкой позже.
