title: Why does generics in java collections so strange?
body: <p>For example check method in java.util.Collections</p>
  
  <pre><code> public static &lt;T&gt; int binarySearch(List&lt;? extends T&gt; list, T key, Comparator&lt;? super T&gt; c) 
  </code></pre>
  
  <p>Why can I define it this way:</p>
  
  <pre><code> public static &lt;T&gt; int binarySearch(List&lt;T&gt; list, T key, Comparator&lt;T&gt; c) 
  </code></pre>
  
  <p>Why does this will not work in java?</p>