2013-08-10 19 views
13

Ich habe einen kleinen Konflikt mit effektiven Java. Auf der einen Seite wird dringend empfohlen, den letzten Modifikator zu verwenden. Es ermutigt auch, foreach Schleife zu verwenden.Verwenden Sie endgültig innerhalb einer Schleife für jede Schleife

Allerdings habe ich kein Stück Code sehen überall, die Codes wie folgt aus:

for (final element e : list) { 
    // do whatever. 
} 

Wenn das Element dann nicht ändern wird erwartet, dass mit Konsumgut zu sein scheint. Warum ist es nicht so häufig?

+1

Ich benutze es die ganze Zeit. Andere benutzen es nicht, weil sie sagen, dass es den Code überladen würde. Diese Art von Schleife wird als "Enhanced for-Schleife" bezeichnet. – Obicere

+0

Ich benutze es auch die ganze Zeit. Aber ich stimme den beiden Lagern zu. Wenn Sie wirklich nicht möchten, dass eine Referenz neu zugewiesen wird, verwenden Sie 'final', Punkt. Aber es * verwirrte * den Code sehr. Ich habe große Teile des Codes gesehen, die auf eine * gute * Weise geschrieben wurden, aber leider übermäßig ausschweifend aussieht. Leider gibt es kein einfaches, was beide Camps zufriedenstellen kann, außer natürlich, dass Sie bereit sind, nach Scala zu ziehen ...;) –

Antwort

5

Es ist nicht wegen seiner "code noise" verwendet.

Das endgültige Schlüsselwort sollte für alle Methodenparameter usw. verwendet werden, aber es ist nicht, denn während mehr "korrekt", ist es weniger lesbar.

0

Grundsätzlich wäre das Element im Rahmen der for-Schleife endgültig. Nicht viel zu gewinnen.

+0

Es ist sehr nützlich im Falle eines 'Runnable' und es hilft, Logikfehler zu vermeiden, die durch Überschreiben verursacht werden die falsche Variable. – chrylis

+0

insbesondere in dem Fall, in dem die 'final'-Variable innerhalb der for-each-Schleife als Schlüssel für den Zugriff auf eine Sammlung verwendet wird, in die gleichzeitig in einem anderen Thread geschrieben werden kann. –

7

Normalerweise behalten Entwickler die Standardeinstellungen bei und fügen nur bei Bedarf Code hinzu. d.h. was immer der kürzeste zu schreibende Code ist, ist einfacher. Denken Sie an ein Hörsaal und sie bitten Sie, Ihre Hände zu heben, wenn Sie etwas tun, und dann bitten Sie Sie, Ihre Hände zu heben, wenn Sie nicht tun, ungefähr die Hälfte des Raumes wird überhaupt nicht abstimmen.

IMHO Der Standard sollte endgültig sein und Sie hätten ein Schlüsselwort var für Werte, die sich ändern können. Auf diese Weise wären viel mehr Felder endgültig.

In diesem speziellen Fall mache ich lokale Variablen nicht endgültig mit der Begründung, dass die Methoden kurz genug sein sollten, um zu entscheiden, ob die Variable geändert wird oder nicht. Wenn Sie das nicht einfach lösen können, ist Ihre Schleife/Methode zu kompliziert.

Für Felder jedoch empfehle ich, diese Endgültigen zu machen, wann immer möglich, besonders wenn sie nicht privat sind, weil es nicht so einfach ist, den ganzen Code zu lesen, wo es benutzt werden könnte.

2

Es gibt viele Orte, an denen Sie - sagen wir mal - das endgültige Keyword platzieren können. Ein typisches Beispiel sind Methodenparameter. Schauen Sie sich diesen Code-Schnipsel:

public static long pow_mod(final long base, final long exponent, final long mod) { 
    // body 
} 

Es gibt eine andere Konvention ist Codezeilen nach 80 Zeichen zu brechen. Diese Deklaration ist noch nicht eingerückt (sie muss innerhalb einer Klasse sein) und ist schon länger als diese Menge. Java ist eine sehr ausführliche Sprache, Sie brauchen Ihren Code nicht noch mehr zu verwirren. zumal es nichts zu gewinnen gibt, was lokale Variablen endgültig macht.