title: What's difference between these two generic methods?
body: <p>Sorry for too abstract title, but I have no idea how to compress this question into a single sentence.</p>
  <p>I cannot figure out why <code>call1</code> is failed to be compiled while <code>call2</code> works well. Aren't <code>call1</code> and <code>call2</code> logically same?</p>
  <pre class="lang-java prettyprint-override"><code>public class Test {
      @AllArgsConstructor
      @Getter
      private static class Parent {
          private String name;
      }
  
      private static class Child extends Parent {
          Child(final String name) {
              super(name);
          }
      }
  
      private void call1(final List&lt;List&lt;? extends Parent&gt;&gt; testList) {
          System.out.println(testList.get(0).get(0).getName());
      }
  
      private &lt;T extends Parent&gt; void call2(final List&lt;List&lt;T&gt;&gt; testList) {
          System.out.println(testList.get(0).get(0).getName());
      }
  
      public void show() {
          final List&lt;List&lt;Parent&gt;&gt; nestedList1 = List.of(List.of(new Parent(&quot;P1&quot;)));
          final List&lt;List&lt;Child&gt;&gt; nestedList2 = List.of(List.of(new Child(&quot;C1&quot;)));
  
          call1(nestedList1); // compile error
          call1(nestedList2); // compile error
          call2(nestedList1); // okay
          call2(nestedList2); // okay
      }
  }
  </code></pre>