|
Blocks :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
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
javap reports:
final class Test12$1 extends Test12$Foo<java.lang.Integer>
minor version: 0
major version: 52
flags: ACC_FINAL, ACC_SUPER
This seems to be a discrepancy between spec and javac (VM? reflection API?) which should be fixed.
|