title: Why is this type not a valid substitute for the type parameter?
body: <p>I'm experimenting with using generics to support a configurable structure of delegating objects (decorators, wrappers). I want to build a chain of delegators that implements a target interface as well as a generic delegator interface.</p>
  
  <p>I have this outline:</p>
  
  <pre><code>class Test {
      static interface Delegator&lt;T&gt; {}
  
      static class DelegatorChain&lt;T extends Delegator&lt;T&gt;&gt; {}
  
      static interface Foo {}
  
      static class FooDelegator implements Delegator&lt;Foo&gt;, Foo {}
  
      public static void main(String[] args) {
          DelegatorChain&lt;FooDelegator&gt; chain = new DelegatorChain&lt;FooDelegator&gt;();
      }
  }
  </code></pre>
  
  <p>But, when trying to instantiate the <code>chain</code> variable,  compiler complains:</p>
  
  <blockquote>
    <p>Bound mismatch: The type Test.FooDelegator is not a valid substitute for the bounded parameter <code>&lt;T 
         extends Test.Delegator&lt;T&gt;&gt;</code> of the type <code>Test.DelegatorChain&lt;T&gt;</code></p>
  </blockquote>
  
  <p>I admit that generics is like <a href="http://en.wikipedia.org/wiki/Niven%27s_laws#Others" rel="noreferrer">magic</a> to me, but I can somehow acknowledge that FooDelegator is not a Foo that <em>extends</em> Delegator&lt;Foo>, it simply implements both interfaces.</p>
  
  <p>Given that it's clear what I want to accomplish, is there anything I can do w.r.t. generics to fix it, or am I just better of forgetting about it?</p>