From Sun's 'Generics in the Java Programming Language'
Collection<?> c = new ArrayList<String>();
c.add(new Object()); // compile time error
Since we don抰 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抰 know
what type that is, we cannot pass anything in. The sole exception is null, which is a
member of every type.