Kann übermäßiger Gebrauch des letzten Schmerzes mehr als Gutes tun?

8

Warum sind die Menschen so entschieden, jede Variable innerhalb einer Klasse "endgültig" zu machen? Ich glaube nicht, dass es einen wirklichen Vorteil bietet, wenn man lokale Variablen final hinzufügt oder wirklich alles andere als Konstanten verwendet und Variablen in anonyme innere Klassen übergibt.

Ich möchte keinen Flammenkrieg starten, ich möchte nur ehrlich wissen, warum das für manche Leute so wichtig ist. Fehle ich etwas?

    
Tim Michalski 10.02.2010, 05:26
quelle

8 Antworten

14
  1. Absicht. Andere Personen, die Ihren Code ändern, ändern keine Werte, die sie nicht ändern sollen.

  2. Compiler-Optimierungen können vorgenommen werden, wenn der Compiler weiß, dass sich der Wert eines Feldes niemals ändert.

Wenn EVERY-Variable in einer Klasse final ist (wie Sie in Ihrem Beitrag darauf Bezug nehmen), dann haben Sie eine unveränderliche Klasse (solange Sie keine Referenzen auf veränderbare Eigenschaften anzeigen), was eine ausgezeichnete Methode ist Fadensicherheit.

    
danben 10.02.2010, 05:32
quelle
7

Der Nachteil ist, dass

%Vor%

Abgesehen von der offensichtlichen Verwendung zum Erstellen von Konstanten und zum Verhindern von Unterklasse / Überschreiben ist dies in den meisten Fällen eine persönliche Präferenz, da viele glauben, dass die Vorteile der "Zeigeprogrammiererabsicht" durch die tatsächliche Codelesbarkeit aufgewogen werden. Viele bevorzugen etwas weniger Ausführlichkeit.

Was Optimierungen betrifft, so ist das ein schlechter Grund, sie zu verwenden ( in vielen Fällen bedeutungslos ). Es ist die schlimmste Form der Mikrooptimierung und in den Tagen der JIT dient kein Zweck.

Ich würde vorschlagen, es zu benutzen, wenn Sie bevorzugen, nicht wenn Sie das sind, was Sie bevorzugen. Da es in vielen Fällen auf religiöse Argumente ankommt, macht euch keine Sorgen.

    
Robin 10.02.2010 19:19
quelle
4

Es bedeutet, dass ich nicht erwarte, dass sich dieser Wert ändert, was eine kostenlose Dokumentation ist. Die Praxis ist, weil es klar die Absicht dieser Variable kommuniziert und den Compiler zwingt, dies zu überprüfen. Darüber hinaus kann der Compiler Optimierungen vornehmen.

    
Travis Gockel 10.02.2010 05:31
quelle
3

Dies ist wichtig, weil immutability wichtig ist, insbesondere wenn es sich um ein Modell mit gemeinsam genutztem Speicher handelt. Wenn etwas unveränderlich ist, dann ist es threadsicher, das macht es gut genug, ein Argument, dem man als Best Practice folgen kann.

Ссылка

    
Jon 10.02.2010 05:34
quelle
2

Ein Projekt, an dem ich gerade arbeite, ist so eingerichtet, dass bei jedem Drücken von "Speichern" in Eclipse der final -Modifikator zu jeder Variablen oder jedem Feld hinzugefügt wird, die nicht im Code geändert wurden. Und es hat noch niemandem geschadet.

    
Bozho 10.02.2010 06:07
quelle
2

Ein Vorteil für die gleichzeitige Programmierung, der noch nicht erwähnt wurde:

Endgültige Felder werden garantiert initialisiert, wenn die Ausführung des Konstruktors abgeschlossen ist.

    
starblue 10.02.2010 10:27
quelle
1

Es gibt viele gute Gründe, das Finale zu verwenden, wie an anderer Stelle erwähnt. Ein Ort, an dem es sich nicht lohnt, IMO, sind Parameter einer Methode. Streng genommen addiert das Schlüsselwort hier einen Wert, aber der Wert ist nicht hoch genug, um der hässlichen Syntax zu widerstehen. Ich würde es vorziehen, diese Art von Informationen durch Unit-Tests auszudrücken.

    
Michael Easter 10.02.2010 15:12
quelle
0

Ich denke, die Verwendung von final über Werte, die innerhalb einer Klasse liegen, ist ein Overkill, es sei denn, die Klasse wird wahrscheinlich vererbt. Der einzige Vorteil liegt in den Compiler-Optimierungen, die sicherlich davon profitieren können.

    
sangupta 10.02.2010 05:33
quelle

Tags und Links