Während des Codierens habe ich ein seltsames Verhalten des Java-Compilers festgestellt.Java Compiler error puzzler: "innere Klassen können keine statischen Deklarationen haben" - mit Ausnahme von einfachen Typen
Beim Kompilieren der Klasse (Quelle unten) gibt der Compiler einen Fehler ("inner classes cannot have static declarations
") für die Klassenvariable NULL aus. Dies ist wie erwartet!
Es wird jedoch kein Fehler für die Klassenvariable ZERO generiert. Das verstehe ich nicht!
Warum dieser Unterschied, der statische Deklarationen einfacher Typen, aber keine Objekte zulässt, in inneren Klassen zuzulassen scheint.
(Javac -Version: 1.6.0_24)
public class Outer {
public static final Runnable HELLO = new Runnable() {
// No compiler error
public static final int ZERO = 0;
// Causes compiler error: "inner classes cannot have static declarations"
public static final Object NULL = null;
@Override
public void run() {
System.out.println("Hello " + ZERO + NULL);
}
};
}
Ich denke, es ist, weil die priomitive Variable wird als eine Konstante und kompiliert * inline * behandelt, während die "Objekt" -Referenz wird nicht. Ich erinnere mich, dass ich in diesem YouTube-Video etwas darüber gesehen habe, wie der Compiler Konstanten mit "Null" -Referenz behandelt: http://www.youtube.com/watch?v=V1vQf4qyMXg&t=68m1s – Magicode
Ob es sich um eine Nullreferenz oder ein "neues Objekt" handelt() "Referenz macht keinen Unterschied, beide verursachen einen Compilerfehler. – Morten