<pre><code>public static void main(String[] args) {

    List&lt;? extends Object&gt; mylist = new ArrayList&lt;Object&gt;();

    mylist.add("Java"); // compile error

}
</code></pre>

<p>The above code does not allow you to add elements to the list and wild cards can only be used as a signature in methods, again not for adding but only for accessing.
In this case what purpose does the above fulfil ??</p>

With java generics using wildcards, you are allowed the above declaration assuming you are only going to read from it.
You aren't allowed to add/write to it, because all generic types must be stripped at compile time, and at compile time there isn't a way the compiler knows List are only strings, (it could be any object including strings!)
You are however allowed to read from it since they are going to be at least objects.  Mixing different types are not allowed in java collections to keep things clean and understandable, and this helps ensure it.