Ich kann nicht verstehen, wo die final
Schlüsselwort ist wirklich praktisch, wenn es für Methodenparameter verwendet wird.
Wenn wir die Verwendung anonymer Klassen, die Lesbarkeit und die Absichtserklärung ausklammern, scheint es mir fast wertlos zu sein.
Zu erzwingen, dass einige Daten konstant bleiben, ist nicht so einfach, wie es scheint.
-
Handelt es sich bei dem Parameter um ein Primitivum, hat dies keine Auswirkungen, da der Parameter als Wert an die Methode übergeben wird und seine Änderung keine Auswirkungen außerhalb des Anwendungsbereichs hat.
-
Wenn wir einen Parameter per Verweis übergeben, dann ist der Verweis selbst eine lokale Variable, und wenn der Verweis innerhalb der Methode geändert wird, hat das keine Auswirkungen außerhalb des Methodenbereichs.
Betrachten Sie das folgende einfache Testbeispiel. Dieser Test ist erfolgreich, obwohl die Methode den Wert des ihr übergebenen Verweises geändert hat, er hat also keine Auswirkungen.
public void testNullify() {
Collection<Integer> c = new ArrayList<Integer>();
nullify(c);
assertNotNull(c);
final Collection<Integer> c1 = c;
assertTrue(c1.equals(c));
change(c);
assertTrue(c1.equals(c));
}
private void change(Collection<Integer> c) {
c = new ArrayList<Integer>();
}
public void nullify(Collection<?> t) {
t = null;
}