title: Why is Foo<String> considered a subtype (extended) of Foo<? extends Object>?
body: <p>This is an extension of <a href="https://stackoverflow.com/a/31891301/2775450">this SO answer</a>.</p>
  
  <blockquote>
    <p>Note: This is not a duplicate of the following. <a href="https://stackoverflow.com/q/25994445/2775450">Why List is not a subtype of <code>List&lt;Number&gt;</code> but is subtype of <code>List&lt;? extends Number&gt;</code>?</a>, nor any of the questions this has been marked duplicate of. Let me explain.</p>
  </blockquote>
  
  <p><strong>The actual question was</strong> (edited to remove unnecessary code),</p>
  
  <pre><code>void wildcardsMethod(List&lt;? super Pair&lt;? super Number&gt;&gt; list) {}
  
  //... From some method.
      List&lt;Pair&lt;Object&gt;&gt; list = null;
      wildcardsMethod(list);
      // Error: wildcardsMethod(List&lt;? super Pair&lt;? super Number&gt;&gt;) is not applicable for the arguments (List&lt;Pair&lt;Object&gt;&gt;)
  </code></pre>
  
  <p><strong><em>The above doesn't work</em></strong>.</p>
  
  <p>And the answer given was <strong>similar to</strong> (if I have not misunderstood),</p>
  
  <blockquote>
    <p><code>Pair&lt;Object&gt;</code> is a <strong>subtype</strong> of <code>Pair&lt;? super Number&gt;</code> and so it cannot be used in place of <code>&lt;? super Pair&lt;&gt;&gt;</code>.</p>
  </blockquote>
  
  <p>I don't understand it in this context. I was thinking it's just a <code>Pair</code> object and we should be able to use it in place of both <code>&lt;? extends Pair&lt;&gt;&gt;</code> and <code>&lt;? super Pair&lt;&gt;&gt;</code>. But it doesn't work in the latter.</p>
  
  <p>Can someone explain why it's considered to be a <strong>subtype</strong> thus limiting it to only <code>extends</code> and not <code>super</code>.</p>
  
  <h2>EDIT:</h2>
  
  <p>To explain a little more, let's see why we will the method (considering <a href="https://stackoverflow.com/q/2723397/2775450">PECS</a>),</p>
  
  <pre><code>void wildcardsMethod(List&lt;? super Pair&lt;? super Number&gt;&gt; list) {}
  </code></pre>
  
  <p>You will be using it to <strong>add</strong> a <code>Pair&lt;Number&gt;</code> object to the passed <code>list</code>.</p>
  
  <p>In this case, <code>List&lt;Pair&lt;Object&gt;&gt;</code> is a valid list which can accept a <code>Pair&lt;Number&gt;</code> object.</p>
  
  <p><strong><em>So, why is this not allowed?</em></strong></p>