Is this a bug?

Alex Buckley alex.buckley at oracle.com
Wed Sep 25 11:04:59 PDT 2013


It's a bug. Presumably this is related to JDK-7118412.

- By JLS 6.3, the scope of the class S is the body of class Tmp, 
including the declaration of interface I.

- By JLS 6.3, the scope of the type parameter S is the type parameter 
section of I and the body of I.

- The type parameter S is a real declaration of a type, so by JLS 6.4.1 
it shadows the declaration of class S throughout the type parameter 
section of I (and the body of I).

Alex

On 9/24/2013 7:17 PM, Zhong Yu wrote:
> This program does not compile (jdk8 build 106)
>
> public class Tmp
> {
>      class S{}
>
>      interface I<S, T extends S>{}
>
>      class C implements I<C,C>{}
> }
>
> Apparently, javac thinks the bound of T is the class S, not the type variable S.
>
> I'm not sure if this is correct - shouldn't type variable S shadow
> class S inside <>?
>
> Thanks,
> Zhong Yu
>


More information about the compiler-dev mailing list