<div dir="ltr">The following snippet compiles with javac7, but not javac8-b128.<div><br></div><div>Shouldn&#39;t the type parameter T be shadowing the inner class Test.T?<br><div><br></div><div>===</div><div><div>class Test {</div>

<div>  class T&lt;E&gt; {}</div><div>  abstract class One&lt;E&gt; {</div><div>  Â  abstract E foo();</div><div>  }</div><div>  abstract class Two&lt;T&gt; extends One&lt;T&gt; {</div><div>  Â  abstract T foo();</div><div>
  }</div>
<div>}</div></div><div>===</div><div><br></div><div><div>error: foo() in Test.Two cannot override foo() in Test.One</div><div>  Â  abstract T foo();</div><div>  Â  Â  Â  Â  Â  Â  Â ^</div><div>  return type T is not compatible with Test.T</div>

<div>  where T,E are type-variables:</div><div>  Â  T extends Object declared in class Test.Two</div><div>  Â  E extends Object declared in class Test.One</div></div></div></div>