Quoting from Gilad Bracha's article
Generics in the Java Programming Language
Collection<?> c = new ArrayList<String>();
c.add(new Object()); // compile time error
Since we don�t know what the element type of c stands for, we cannot add objects
to it. The add() method takes arguments of type E, the element type of the collection.
When the actual type parameter is ?, it stands for some unknown type. Any parameter
we pass to add would have to be a subtype of this unknown type. Since we don�t know
what type that is, we cannot pass anything in. The sole exception is null, which is a
member of every type.
[ August 27, 2007: Message edited by: Ram Chandramouli ]