title: On Java generics lower bound usage: ? super T
body: <p>I am trying to understand the usage of lower bound wildcards in some depth. I am trying to write a generic method <code>copy</code> which copies the contents of one <code>List</code> to another. I came up with this method signature:</p>
  
  <pre><code>&lt;T&gt; void copy(List&lt;T&gt; dest, List&lt;? extends T&gt; src)
  </code></pre>
  
  <p>I think this signature is comprehensive to address all scenarios. However, I see that in the Java Collections class the method signature is like this:</p>
  
  <pre><code>&lt;T&gt; void copy(List&lt;? super T&gt; dest, List&lt;? extends T&gt; src)
  </code></pre>
  
  <p>I do not understand why they use <code>List&lt;? super T&gt; dest</code> instead of just <code>List&lt;T&gt; dest</code>. Is there some extra flexibility with their signature?</p>