Wenn eine lokale innere Klasse innerhalb einer Methode deklariert wird, warum ist es zulässig, endgültige statische Strings oder Ints einzuschließen, aber nicht zulässig, andere Objekte einzuschließen?Java finale statische Deklarationen in lokalen Methodenklassen
Zum Beispiel:
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();
}
}
Wenn ich dies kompilieren, erhalte ich die folgende:
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();
^
Warum der Unterschied? Liegt es daran, dass String unveränderlich ist? Wenn ja, wäre nicht Integer.valueOf() auch gültig?
Ich bin mir ziemlich sicher, es ist, weil "compiles" und 10 Konstanten Ausdrücke für die Kompilierung sind, aber ich habe die JLS Regel noch nicht gefunden. –