Anonymous classes are not final according to reflection API
Remi Forax
forax at univ-mlv.fr
Tue Jun 23 06:50:40 UTC 2015
Hi Victor,
did you have open a bug for that ?
cheers,
Rémi
On 06/22/2015 05:56 PM, Victor Rudometov wrote:
> This seems to be a reflection bug, since ACC_FINAL is present in
> Test12$1.class file:
>
> final class test.Test12$1 extends test.Test12$Foo<java.lang.Integer>
> minor version: 0
> major version: 52
> flags: ACC_FINAL, ACC_SUPER
>
> Thanks.
> Victor.
>
> On 22-Jun-15 18:35, Remi Forax wrote:
>> 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/20150623/5302fc1b/attachment.html>
More information about the compiler-dev
mailing list