Anonymous classes are not final according to reflection API

Remi Forax forax at univ-mlv.fr
Mon Jun 22 15:35:35 UTC 2015


I wonder if it's not a reflection bug,
did you check with 'javap -c -verbose' the modifiers of the generated 
class (something like Test12$1.class) ?

cheers,
Rémi

On 06/22/2015 05:17 PM, Georgiy Rakov wrote:
> Hello,
>
> if I understand correctly according to following assertion from JLS 
> 15.9.5 anonymous classes are always final:
>
>     An anonymous class is always implicitly final (§8.1.1.2).
>
> But reflection API reports that the class is not final. Namely let's 
> consider following code:
>
>     import java.lang.reflect.Modifier;
>
>     public class Test12 {
>         static class Foo<T> {}
>
>         public static void main(String argv[]) {
>             Foo<Integer> foo = new Foo<>() {};
>             if ( (foo.getClass().getModifiers() & Modifier.FINAL) != 0 ) {
>                 System.out.println("final, modifiers: " +
>     foo.getClass().getModifiers());
>             } else {
>                 System.out.println("not final, modifiers: " +
>     foo.getClass().getModifiers());
>             }
>         }
>     }
>
> On JDK9b69 it reports:
>
>     not final, modifiers: 0
>
> Could you please tell if you consider this as a discrepancy between 
> spec and javac (VM?) which should be fixed.
>
> Thank you,
> Georgiy.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/compiler-dev/attachments/20150622/84673f67/attachment.html>


More information about the compiler-dev mailing list