<p>Why isn't <a href="http://java.sun.com/javase/6/docs/api/java/util/Collection.html#remove(java.lang.Object)" rel="noreferrer">Collection.remove(Object o)</a> generic?  </p>

<p>Seems like <code>Collection&lt;E&gt;</code> could have <code>boolean remove(E o);</code> </p>

<p>Then, when you accidentally try to remove (for example) <code>Set&lt;String&gt;</code> instead of each individual String from a <code>Collection&lt;String&gt;</code>, it would be a compile time error instead of a debugging problem later.</p>

Because if your type parameter is a wildcard, you can't use a generic remove method.
I seem to recall running into this question with Map's get(Object) method.  The get method in this case isn't generic, though it should reasonably expect to be passed an object of the same type as the first type parameter.  I realized that if you're passing around Maps with a wildcard as the first type parameter, then there's no way to get an element out of the Map with that method, if that argument was generic.  Wildcard arguments can't really be satisfied, because the compiler can't guarantee that the type is correct.  I speculate that the reason add is generic is that you're expected to guarantee that the type is correct before adding it to the collection.  However, when removing an object, if the type is incorrect then it won't match anything anyway.  If the argument were a wildcard the method would simply be unusable, even though you may have an object which you can GUARANTEE belongs to that collection, because you just got a reference to it in the previous line....
I probably didn't explain it very well, but it seems logical enough to me.