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