Podczas deklarowania lokalnej klasy wewnętrznej w metodzie, dlaczego legalne jest dołączanie końcowych ciągów statycznych lub int, ale nie jest legalne, aby uwzględnić inne obiekty?Ostateczne deklaracje statyczne Java w metodzie lokalnych
Na przykład:
class Outer {
void aMethod() {
class Inner {
final static String name = "compiles";
final static int ctr = 10; // compiles
final static Integer intThree = Integer.valueOf(3); // does not compile!
final static obj objConst = new Object(); // does not compile!
}
Inner inner = new Inner();
}
}
Kiedy skompilować tego, pojawia się następujący:
InnerExample.java:6: inner classes cannot have static declarations
final static Integer outer = Integer.valueOf(3);
^
InnerExample.java:7: inner classes cannot have static declarations
final static Object objConst = new Object();
^
Dlaczego rozróżnienie? Czy to dlatego, że String jest niezmienny? Jeśli tak, to czy wartość Integer.valueOf() nie byłaby ważna?
Jestem prawie pewny, że to dlatego, że "kompiluje", a 10 to stałe wyrażenia w czasie kompilacji, ale jeszcze nie znalazłem zasady JLS. –