Die Codezeile ist vollkommen in Ordnung, und es gibt kein echtes Problem, weil die Variable final
und static
ist.
Vielleicht war die Person, die diesen Kommentar machte, durch das folgende verwirrt. Wenn Sie in Java eine public final static
Variable vom Typ int
(zum Beispiel; es funktioniert auch mit einigen anderen Typen) erstellen, könnte der Compiler an Stellen, an denen Sie diese Variable verwenden, den tatsächlichen Konstantenwert anstelle von a ersetzen Bezug auf die Variable. Angenommen, Sie haben die folgende:
class A {
public final static int VALUE = 3;
}
public class B {
public static void main(String[] args) {
System.out.println(A.VALUE);
}
}
Wenn Sie diese kompilieren und ausführen, es ist offensichtlich 3.
Nehmen wir nun an, dass Sie Klasse A
ändern und VALUE = 4
gedruckt wird. Sie würden erwarten, dass, wenn Sie die Klasse A
neu kompilieren und dann die Klasse B
ausführen (ohne die Klasse B
neu zu kompilieren), würden Sie 4
sehen. Aber was passiert ist, dass Sie immer noch 3
sehen. Dies liegt daran, dass die A.VALUE
in Klasse B
durch den tatsächlichen konstanten Wert 3
ersetzt wurde, als Sie die Klasse B
kompilierten.
Dies ist eine Optimierung, die der Java-Compiler für Konstanten durchführt.
Wie Sie sehen, kann dies zu Problemen führen, wenn Sie solche Konstanten in der öffentlichen API Ihrer Klassen haben. Benutzer Ihres Codes müssen ihren Code neu kompilieren, wenn Sie den Wert solcher Konstanten ändern.
Aber in dem Code, den Sie in Ihrer Frage geschrieben haben, ist dies kein Problem, weil die Variable private
ist.
Weitere Details:
Java Language Specification 13.4.9
Es gibt einen guten Grund, warum er nicht mehr in Ihrem Team ist ... was Sie haben, ist völlig in Ordnung !!! Es ist nichts falsch daran. – StackFlowed
Wahrscheinlich ist das Timing falsch? Würde dies dazu führen, dass das Programm versucht, "log" zu initialisieren, bevor "LoggerFactory" bereit ist? Sorry, mir ist nicht klar, in welcher Reihenfolge in einem Java-Programm etwas passiert. – ajb
@ajb Natürlich nicht. –