Unable to write complex generic definition for a class
<p>I am trying to write assert class for my custom class</p>

<pre><code>public class ChangeCollector&lt;T&gt; 
   extends ArrayList&lt;ChangeEntry&lt;T&gt;&gt; 
</code></pre>

<p>and I am writing</p>

<pre><code>public class ChangeCollectorAssert
   &lt;T, EA extends AbstractAssert&lt;EA, ChangeEntry&lt;T&gt;&gt;&gt; 
      extends AbstractListAssert
         &lt;ChangeCollectorAssert&lt;T, EA&gt;, ChangeCollector&lt;T&gt;, ChangeEntry&lt;T&gt;, EA&gt;
</code></pre>

<p>and it swears</p>

<pre><code>Type parameter 'ChangeCollector' is not within its bound; 
should implement 'java.util.List&lt;? extends ChangeEntry&lt;T&gt;&gt;'
</code></pre>

<p>but looks like it does implement <code>List</code>, doesn't it?</p>

<p>Isn't <code>ArrayList&lt;ChangeEntry&lt;T&gt;&gt;</code> assignable to <code>List&lt;? extends ChangeEntry&lt;T&gt;&gt;</code>?</p>

<p><strong>UPDATE</strong></p>

<p>I wrote the following code:</p>

<pre><code>private static &lt;T&gt; void test01() {
      List&lt;? extends T&gt; list1;
      ChangeCollector&lt;T&gt; list2 = new ChangeCollector&lt;T&gt;();

      list1 = list2; // ok!
   }
</code></pre>

<p><s>and it compiles ok</s></p>

<p>No, it didn't compile ok. I confused compiler and checker. But what is the problem with that conversion?</p>