title: Java generics: cannot convert <X> into <? extends X>
body: <p>Building the following code with Java 10.0.2+13, Gradle 4.9 &amp; Guava 26.0-jre outputs this error:</p>
  
  <p>Error:</p>
  
  <pre><code>argument mismatch; bad return type in method reference
  
  Iterator&lt;Entry&lt;String,ImmutableMap&lt;Path,String&gt;&gt;&gt;
  
  cannot be converted to
  
  Iterator&lt;Entry&lt;? extends String,? extends ImmutableMap&lt;Path,String&gt;&gt;&gt;
  </code></pre>
  
  <p>Code:</p>
  
  <pre><code>final Map&lt;String, Map&lt;Path, String&gt;&gt; m = new HashMap&lt;&gt;();
  
  // put entries into m
  
  final ImmutableMap&lt;String, ImmutableMap&lt;Path, String&gt;&gt; im =
      ImmutableMap.&lt;String, ImmutableMap&lt;Path, String&gt;&gt;copyOf(
          m.entrySet().stream().map(
              e -&gt; immutableEntry(
                  e.getKey(),
                  ImmutableMap.copyOf(e.getValue())
              )
          )::iterator
      )
  ;
  </code></pre>
  
  <p>Why do <code>String</code> &amp; <code>ImmutableMap&lt;Path,String&gt;</code> not satisfy <code>? extends String</code> &amp; <code>? extends ImmutableMap&lt;Path,String&gt;</code>, respectively?</p>
  
  <p>How can I get this to properly compile?</p>