title: Overload: why List<String> and List<Integer> make ambiguous declaration?
body: <p>Why doesn't this compile?
  I want to know the underlying reason.</p>
  
  <p>If </p>
  
  <pre><code> List&lt;String&gt; 
  </code></pre>
  
  <p>is not the same type as </p>
  
  <pre><code> List&lt;Integer&gt; 
  </code></pre>
  
  <p>why </p>
  
  <pre><code>public String convert(List&lt;String&gt; strings) { return null; }
  </code></pre>
  
  <p>and </p>
  
  <pre><code>public String convert(List&lt;Integer&gt; strings) { return null; }
  </code></pre>
  
  <p>make an ambiguous declaration?</p>
  
  <pre><code>public class Converter {
  
      public void why() {
          List&lt;String&gt; strings = null;
          List&lt;Integer&gt; integers = null;
  
          strings = integers; // type mismatch
      }
  
      public String convert(List&lt;String&gt; strings) {
          // error: why is this ambiguous ?
          return null;
      }
  
      public String convert(List&lt;Integer&gt; strings) {
          // error: why is this ambiguous ?
          return null;
      }
  
  }
  </code></pre>