Alle Variablen final setzen ?

delphiking1980

Bekanntes Mitglied
Hallo,

diesmal eine Allgemeine Frage, ich arbeite jetzt in einer Firma wo Sie wirklich alle Variablen final setzen wo sie nur können aber keiner kann mir sagen was der sinn ist nur halt "Das machen wir schon immer so" und solche floskeln.

Gibt es einen größeren Sinn dahinter ??


Mfg

Delphiking1980
 

irgendjemand

Top Contributor
"FINAL" wird verwendet wenn eine variable einmal initialisiert aber nicht mehr geändert werden darf ...

wird meist in methoden-signaturen verwendet ... aber an sich hat das keinen größeren sinn und zeugt davon das das mal wer eingebracht hat der sich in solch lustigen büchern die sich "code-optimierungen" und so schimpfen etwas missverstanden hat ...

allgemein hin könnte man aber sagen das man FINAL nur in konstanten und spezielle "variablen" einsetzen sollte welche vor änderung geschützt werden sollen ... was aber auch wiederum gegen OOP spricht und vermutlich aus der C/C++ ecke stammt
 

delphiking1980

Bekanntes Mitglied
so sehe ich das auch nur es wunderte mich halt das wirklich alle möglichen Variablen final gesetzt werden ohne das Sie aber auch großgeschrieben werden denn das ist jawohl auch ein teil der Java Beans konvention oder ?
 
B

bygones

Gast
allgemein hin könnte man aber sagen das man FINAL nur in konstanten und spezielle "variablen" einsetzen sollte welche vor änderung geschützt werden sollen
nein - final fuer Methoden bei Vererbungen ist ein maechtiges und sehr sinnvolles Instrument. Man kann somit genau steuern, welche methoden subklassen ueberschreiben duerfen und welche sie die Finger von lassen sollen.

fuer Variablen nehm ich sie nur wenn ich vom compiler gezwungen werde.

EDIT: ausser bei Instanzvariablen, da sollte man soweit wie moeglich final nutzen
 
Zuletzt bearbeitet von einem Moderator:

delphiking1980

Bekanntes Mitglied
Methoden Parameter, Member Variablen und lokale Variablen quasi alles was möglich ist.
Meine Meinung ist da hat wirklich jemand nicht weitgenug gedacht und der Rest des Teams ist nicht fähig genug dieses der Person schonend bei zu bringen..... Aber es gibt noch viele mehr Punkte die wirklich ungereimt sind.
 
B

bygones

Gast
Methoden Parameter, Member Variablen und lokale Variablen quasi alles was möglich ist.
Meine Meinung ist da hat wirklich jemand nicht weitgenug gedacht und der Rest des Teams ist nicht fähig genug dieses der Person schonend bei zu bringen..... Aber es gibt noch viele mehr Punkte die wirklich ungereimt sind.
das klingt nun etwas sehr ausladend... das final stoert niemanden und hat einen Sinn, dass sichergestellt wird, dass diese Variable sich nicht mehr aendert. Fuer Instanzvariablen ist dies ein Vorteil (siehe immutable). Fuer lokale vielleicht nicht so, aber es ist bei weitem nicht "nicht weitgenug gedacht".
 

tfa

Top Contributor
Man kann darüber streiten, ob es für Methoden-Parameter sinnvoll ist.
Bei Membern hat ein final einige (teilw. theoretische) Vorteile, wie bessere Optimiermöglichkeiten für Compiler bzw. JIT, Threadsicherheit (Stichwort immutable) etc.

Aber es gibt noch viele mehr Punkte die wirklich ungereimt sind.
Welche sind das, bzw. was spricht alles dagegen? Mal abgesehen davon, dass man das [c]final[/c] eintippen muss und es den Code aufbläht?
 
T

Tomate_Salat

Gast
Welche sind da, bzw. was spricht alles dagegen? Mal abgesehen davon, dass man das final eintippen muss und es den Code aufbläht?

Nope nichtmal, dass müsste man alles Eclipse überlassen können. Bei mir ist es aber lediglich so eingestellt, dass Parameter final sind (ist das einzige, wo ich mir 100% sicher bin, dass ich das final da stehen haben möchte). Den Rest mache ich händisch (aber auch nur wenn nötig). Wenn es Betriebskonvention ist, überall ein final zu setzen wo es möglich ist, würde ich es über die Save-Actions von Eclipse lösen.
 
B

Beni

Gast
Ich bin ja vielleicht altmodisch... aber wenn man aus Versehen die falschen Variablen überschreibt, sollte man vielleicht einfach etwas [STRIKE]sorgfältiger[/STRIKE] sauberer programmieren. Das behebt dann auch gleich all die anderen Probleme die der sonst erzeugte Spaghetticode mit sich bringt. :pueh:
 
Zuletzt bearbeitet von einem Moderator:
M

maki

Gast
Richtig. die gibt's ja auch noch. Bleibt also nur der geringfügig aufgeblähte Quelltext als Nachteil.
Dieser Nachteil wiegt imho recht schwer, ist aber auch Gewohnheitssache, wenn das immer so gemacht wird ist das kein Problem.

Die Vorteile sind recht offentsichtlich, zumindest wenn man final verstanden hat.
 

tfa

Top Contributor
aber wenn man aus Versehen die falschen Variablen überschreibt, sollte man vielleicht einfach etwas sorgfältiger sauberer programmieren.
Das ist ein Totschlagargument (ob nun sorgfältiger oder sauberer). Dann kannst du auch sagen, man braucht keine Unittests, wenn man sauber programmiert.
 

Marco13

Top Contributor
Auf die Performance hat das final in der Praxis wohl kaum Einfluß. Bei Members verwende ich es üblicherweise auch. Es ist dann einfach ein klares, designtechnisches Statement:
private final List<String> names;
Die Liste wird im Konstruktor erstellt, und dann NIE mehr verändert. (Eine Ausprägung des Bloch'schen Mantras "Minimize Mutability"). Bei Methodenparametern wäre es eigentlich "stilistisch gut", aber subjektiv fände ich es "stilistisch besser" Methodenparameter nicht explizit final zu machen, sondern sie aus Prinzip einfach nicht zu verändern (man kann dafür Ecplise sogar eine Warnung generieren lassen, und das ist wohl nicht verkehrt). Aber bei lokalen Variablen noch final dazu ... hm... Das ist weder ein designtechnischer Aspekt, noch ein stilistischer, und ob's übersichtlicher wird... naja... :bahnhof:
 

x22

Bekanntes Mitglied
Hmm.. final das ist immer so eine Sache. Ich würde sagen, manchmal muss es sein, da man sonst etwas weiter gibt und irgendein Dep* meint eine Variable umdefinieren zu müssen... grade in größeren Projekten..andernfalls ist es gewohnheitssache.. ich mag es auch nicht, finde das ein unnötiges Wort.. aber muss jeder selber wissen.

Fazit: Manchmal ein muss, häufig Spielerei..

Best regards,
x22
 
M

maki

Gast
In Verbindung mit OR-Mappern kann final vor Member-Variablen sogar Probleme verursachen.
Nicht nur mit ORM, auch mit DI Frameworks, wenn zB. in felder injiziert wird, dann kann zwar final dabeistehen, ist es aber effektiv nicht.

final gibt ein paar Garantien, u.a. dass jeder Thread den "gleichen final Wert sieht", das ist schlicht nicht gegeben in solchen Fällen.
Das Problerm ist nicht final, sondern schlicht dass es "gelogen" ist in solchen Situationen, muss man aber Wissen als Entwickler und die Framework Hersteller verheimlichen das auch nicht.

Injections - google-guice - How Guice initializes your objects - Guice (pronounced 'juice') is a lightweight dependency injection framework for Java 5 and above, brought to you by Google. - Google Project Hosting
..
Avoid using field injection with final fields, which has weak semantics.
 
R

reNur

Gast
Naja, das was Bloch über Klassen sagt:

Classes should be immutable unless there's a very good reason to make them mutable....If a class cannot be made immutable, limit its mutability as much as possible

sollte doch auch für Variablen gelten oder? Also erstmal alle Variablen von Haus aus final setzen, und nur wenn ich mir sicher bin, dass ich sie noch verändern muss, mache ich sie mutable. Ich mach das zwar auch nicht immer so, aber ich glaube es wäre kein schlechter Weg. Besonders Probleme mit Threadsicherheit geht man so schon von Anfang an aus dem Weg (auch wenn man bei Beginn nie daran gedacht hätte, dass der Code mal in einem Multuthreaded-Programm genutzt wird...).
 
M

maki

Gast
Blochs Aussage ist mir persönlich zu allgemein, Eric Evans ist da spezifischer.
ValueObjects, also Objekte deren Identität nur von ihrem Wert abhängen (String, Money, etc. pp.) sollten immutable sein.
Entites, also Objekte die eine Identität unabhängig von ihrem Wert haben (wie zB. Person, etc. pp.) müssen natürlich mutable sein, aber nicht komplett.
Entites kann man ja zum Teil aus ValueObjects zusammensetzen, zB. der Name einer Person kann/soll ein Immutable String sein.
 
A

Andgalf

Gast
Und selbst, wenn man einen ORM Mapper nimmt, kann man immer noch, wann immer es geht die Variablen mit final deklarieren (bei den Entities geht das dann halt einfach nicht ;-) )

Das ist natürlich korrekt !

Allerdings heißt der Thread ja alle Variablen final setzen. Deshalb dachte ich, ich werf das mal ein :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
Zrebna Wie ermittelt man alle testbaren (zu testenden) Klassen in seinem Maven-Projekt? Allgemeine Java-Themen 23
_user_q Alle Kombinationen von "0000" bis "FFFF" kompakt schrieben Allgemeine Java-Themen 13
_user_q JavaFX Robot alle Unicode-Zeichen schreiben lassen können Allgemeine Java-Themen 12
S Bookmark HTML Datei einlesen, alle Links erhalten und manche editieren..? (aktuell JSoup) Allgemeine Java-Themen 4
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
Drachenbauer wie kann ich alle instanzen einer Klasse durchsehen, ohne, dass diese in einer Liste erzeugt wurden? Allgemeine Java-Themen 11
8u3631984 Generelle Log4j.xml für alle Module Allgemeine Java-Themen 5
L Farbverlauf RGB alle Farben Allgemeine Java-Themen 28
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
S Alle Dateinamen ermitteln Allgemeine Java-Themen 22
F Wie bekommt man alle Filenamen eines Webserver Verzeichnisses Allgemeine Java-Themen 6
S Kann ich eine Methode schreiben die alle Arten von funktionalen Interfaces akzeptiert..? Allgemeine Java-Themen 21
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
MaxG. Best Practice Alle Kombinationen berechnen Allgemeine Java-Themen 3
J Best Practice Objekt an alle Klassen verteilen ( Discord Bot ) Allgemeine Java-Themen 7
C BufferedReader/BufferedWriter schreibt nicht alle Bytes Allgemeine Java-Themen 2
J Alle Unit Tests in Maven Modul Projekt ausführen Allgemeine Java-Themen 7
S Anwendung die alle Abhaengigkeiten einer Library listet..? Allgemeine Java-Themen 5
T Alle Kombinationen aus zwei Arrays Allgemeine Java-Themen 8
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
I Alle logs von Logger bekommen Allgemeine Java-Themen 3
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
K Classpath Alle Classen aus einem Package lesen Allgemeine Java-Themen 7
L Alle möglichen Additionen (Rekursiv) Allgemeine Java-Themen 3
KaffeeFan Methoden replace alle Buchstaben Allgemeine Java-Themen 3
S Alle Methodenaufrufe eines Threads notieren..? Allgemeine Java-Themen 7
U Koordinaten alle Pixel eines Dreiecks zeichnen ausgeben Allgemeine Java-Themen 5
Z Eclipse hängt sich alle paar Sekunden auf (Keine Rückmeldung). Allgemeine Java-Themen 4
Seikuassi Alle Escape-Sequenzen in einem String ersetzen Allgemeine Java-Themen 4
F Java Spintax: Alle Kombinationen Erzeugen Allgemeine Java-Themen 2
Sogomn Klassen Alle in eine Klasse Allgemeine Java-Themen 11
P Methoden Alle Kombinationen aus 2 Karten berechnen Allgemeine Java-Themen 2
B Threads Barrier mit wait()/notify() aber nicht alle Prozesse terminieren Allgemeine Java-Themen 2
S .jar hat nicht alle Klassen ??? Allgemeine Java-Themen 10
T Wie kann ich alle existierenden Java-Klassen anzeigen lassen? Allgemeine Java-Themen 10
M Zufälligen String generieren und alle 5 Minuten ändern Allgemeine Java-Themen 2
M RegEx alle Matches ausgeben Allgemeine Java-Themen 5
A Applet Alle Threads beim schließen des Applets beenden Allgemeine Java-Themen 8
C SwingWorker.cancle(true) tötet alle Worker Allgemeine Java-Themen 3
T Alle Instancen einer Klasse auflisten Allgemeine Java-Themen 13
S Programm das alle aufgerufenen Methoden ausgibt..? Allgemeine Java-Themen 6
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
brunothg Alle Kombiationen von n Ziffern Allgemeine Java-Themen 2
M Erste Schritte alle xmlFiles in zugehörige pdfFiles einlesen Allgemeine Java-Themen 4
B Variablen Alle RenderingHints.Keys (KEY_*) in Array + alle RenderingHints.Keys (VALUE_*) in Object[] Allgemeine Java-Themen 8
D generische Klasse für alle Maps (nicht Collections :-)) Allgemeine Java-Themen 11
E Logger loggt nicht alle Level Allgemeine Java-Themen 2
S Aus einer Liste<Oberklasse> alle Elemente die eine bestimmte Unterklasse von Oberklasse haben filter Allgemeine Java-Themen 8
K String: alle X Zeichen Zeilenumbruch Allgemeine Java-Themen 3
F Alle Exceptions abfangen Allgemeine Java-Themen 4
nrg JS als ScriptEngine - alle Punkte ersetzen Allgemeine Java-Themen 4
A Bildschirmauflösung geändert - alle Bildschirminhalte verschoben - was tun? Allgemeine Java-Themen 7
C Alle Klassen eines Packages lesen und instanzieren? Allgemeine Java-Themen 9
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
S Warum packt er nicht alle Dateien? Allgemeine Java-Themen 13
J Alle Tage eines Jahres Allgemeine Java-Themen 2
AlexSpritze Alle Domains oder FQDN von einem Server erfragen? Allgemeine Java-Themen 2
Spot84 alle kombinationen einer string arraylist Allgemeine Java-Themen 2
S Alle Elemente von zwei Listen vergleichen Allgemeine Java-Themen 10
J Konstrukt um alle Paare und Tripel einer Punkte-Menge bilden Allgemeine Java-Themen 12
B Alle möglichen Buchstabenkombinationen in einem String Allgemeine Java-Themen 7
P alle zusammanhaengenden teilgraphen Allgemeine Java-Themen 7
A alle nicht-dplikate finden Allgemeine Java-Themen 14
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
E Alle unter Prozesse der beim schließen mit schließen Allgemeine Java-Themen 3
A An alle Cracks: Anwendung beenden mit ShutdownHook? Allgemeine Java-Themen 13
J Logger gibt nicht alle Level aus Allgemeine Java-Themen 3
M alle möglichen Zahlenkombinationen Allgemeine Java-Themen 5
B in welchem verzeichnis liegen alle installierten klassen? Allgemeine Java-Themen 6
hdi Für alle fleissigen Helfer! Allgemeine Java-Themen 15
N Alle Fehler ausgeben? Allgemeine Java-Themen 4
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
O Auf alle Events reagieren Allgemeine Java-Themen 3
B J-Unit Tests. Alle Tests eines Package einsammen. Allgemeine Java-Themen 4
U alle Dateien eines Ordners innerhalb einer JAR auflisten Allgemeine Java-Themen 6
S toString() für alle Member einer Klasse. Allgemeine Java-Themen 6
G Alle möglichen Konfigurationen eines Baumes Allgemeine Java-Themen 4
C Alle Möglichen Substrings der Länge k aus String extrahieren Allgemeine Java-Themen 9
C Alle Bilder eines binären Arrays ausgeben Allgemeine Java-Themen 3
G Alle möglichen Permutationen einer Folge n Allgemeine Java-Themen 3
V Alle Klassen eines Package auflisten? Allgemeine Java-Themen 6
H JTable Löschen [Alle Zeilen aufeinmal Löschen] Allgemeine Java-Themen 6
@ RegEx: Alle Sonderzeichen ausser dem Punkt Allgemeine Java-Themen 4
G Alle Möglichen Kombinationen einer Liste Allgemeine Java-Themen 11
H Alle möglichen Hochkommata ausschließen Allgemeine Java-Themen 6
M Gibt es ein Jar - das alle Componente Automatisch anpasst? Allgemeine Java-Themen 14
K Suche alle Objekte einer bestimmten Klasse Allgemeine Java-Themen 2
N Unter Mac Os X alle laufenden Prozesse ausgeben Allgemeine Java-Themen 3
S Änderung an Proberties datei an alle User weitergeben? Allgemeine Java-Themen 7
P Observer, nicht alle updates bearbeiten Allgemeine Java-Themen 2
der JoJo [TreeSelection] wie bekomme ich alle Elemente Allgemeine Java-Themen 4
G Alle Zeichen des Alphabets ausgeben Allgemeine Java-Themen 4
G Alle Möglichkeiten n Elemente Anzuordnen. Allgemeine Java-Themen 13
0 Alle Teiler einer Zahl performant berechnen? Allgemeine Java-Themen 9
J Funktion alle Möglichkeiten berücksichtigen Allgemeine Java-Themen 5
O Warten bis alle gestarteten Threads beendet sind? Allgemeine Java-Themen 6
G HTML file Alle relativen URL in absolute URL umschreiben? Allgemeine Java-Themen 12
D FileWriter, PrintWriter und wie sie alle heißen. Allgemeine Java-Themen 13

Ähnliche Java Themen


Oben