Welchen Unterschied macht es in einer typischen Spring-MVC-Validator-Klasse beim Einfügen eines errorCode-Werts in das Errors-Objekt zwischen der Verwendung eines solchen String ( props.somefield.req
)
errors.rejectValue("elementId", "props.somefield.req");
Verse einer deklarierten statischen endgültigen Zeichenfolge?
private static final String SOMFIELD_REQ = "props.somefield.req"; ...
errors.rejectValue("elementId", SOMFIELD_REQ);
Verbessert es die Leistung auch nur im geringsten? Ich habe ein paar Fragen zum Stapelüberlauf gelesen ( String und final , Ist es sinnvoll, einen finalen String in Java zu definieren? ), Aber niemand hat die Frage zur Aktualisierung dieser Fragen beantwortet.
java
programming-practices
variables
final
happybuddha
quelle
quelle
Antworten:
Zur Laufzeit macht es keinen Unterschied.
Der Punkt ist die Lesbarkeit - als Mitgliedsvariable wird sie wahrscheinlich am Anfang des Quellcodes der Klasse deklariert. Wenn sie statisch ist, muss sie nicht für jede neue Instanz der Klasse zugewiesen werden.
Wenn Sie es endgültig machen, bedeutet dies für den Leser, dass sich der Wert nicht ändert (auch für den Compiler, aber das ist hier weniger wichtig).
Auf diese Weise sind keine "magischen Werte" in der Implementierung vergraben, und wenn eine Änderung der "Konstante" gewünscht wird, muss sie nur an einer Stelle geändert werden.
Dies ahmt im Grunde nach, was ein C-Programmierer mit einem #define machen würde.
quelle
final
Felder haben viele Vorteile!Das Deklarieren von Feldern
final
bietet wertvolle Dokumentationsvorteile für Entwickler, die Ihre Klasse verwenden oder erweitern möchten. Dies erklärt nicht nur die Funktionsweise der Klasse, sondern hilft auch dem Compiler bei der Durchsetzung Ihrer Entwurfsentscheidungen. Anders als beifinal
Methoden hilft das Deklarieren eines endgültigen Felds dem Optimierer, bessere Optimierungsentscheidungen zu treffen . Wenn der Compiler weiß, dass sich der Wert des Felds nicht ändert, kann er den Wert sicher in einem Register zwischenspeichern .final
Felder bieten außerdem ein zusätzliches Maß an Sicherheit, indem der Compiler erzwingt, dass ein Feld schreibgeschützt ist.Versuchen Sie nicht, es
final
als Performance-Management-Tool zu verwenden. Es gibt viel bessere und weniger einschränkende Möglichkeiten, um die Leistung Ihres Programms zu verbessern. Verwendenfinal
Sie diese Option, wenn sie die grundlegende Semantik Ihres Programms widerspiegelt: um anzuzeigen, dass Klassen unveränderlich oder schreibgeschützt sein sollen.Bevor Sie endgültige Felder deklarieren, sollten Sie sich fragen: Muss dieses Feld wirklich veränderbar sein?
quelle