Das Schlüsselwort final für Methodenparameter hat einen begrenzten Nutzen.
Wenn ein primitiver Typ als Methodenparameter verwendet wird, hat die Markierung als „final“ keine Auswirkung. Primitive Parameter werden als Wert übergeben, was bedeutet, dass alle am Wert innerhalb der Methode vorgenommenen Änderungen nicht außerhalb der Methode widergespiegelt werden.
Für nicht-primitive Parameter ( Wenn Sie sie als endgültig markieren, kann die Methode dem Parameter keine neue Referenz zuweisen. Das Objekt selbst kann jedoch weiterhin geändert werden.
Das folgende Beispiel veranschaulicht diese Einschränkungen:
public void changeParameter(Collection<Integer> c) { c = new ArrayList<>(); // Can't assign a new reference c.add(5); // Mutating the object is still possible }
Auch wenn c als final markiert ist, ist die Methode Ändert die Sammlung, auf die c verweist.
Trotzdem Trotz aller Einschränkungen bietet das Markieren von Parametern als endgültig einen entscheidenden Vorteil: Es verhindert, dass die Methode den Parameter versehentlich einem anderen Objekt neu zuweist. Dies kann dazu beitragen, Fehler zu vermeiden, wenn die Methode auf dem Objekt basiert, auf das der Parameter verweist.
Im Allgemeinen wird empfohlen, Methodenparameter als „final“ zu markieren, es sei denn, es gibt einen bestimmten Grund, dies nicht zu tun. Es verbessert die Lesbarkeit und verhindert versehentliche Fehler. Es ist jedoch wichtig, sich der Einschränkungen von final bewusst zu sein, wenn es mit nicht-primitiven Parametern verwendet wird.
In einem wichtigen Fall ist es wichtig, Parameter als final zu kennzeichnen: wann Die Methode garantiert, dass das vom Parameter referenzierte Objekt nicht geändert wird. Diese Sicherheit kann erreicht werden, wenn das Objekt unveränderlich ist, d. h. sein Zustand kann nicht geändert werden. Zum Beispiel:
public void processImmutableObject(final ImmutableClass obj) { // obj's state will not change }
In diesem Szenario verhindert die Markierung von obj final, dass die Methode das Objekt versehentlich ändert.
Das obige ist der detaillierte Inhalt vonWarum werden Methodenparameter in Java selten als „final' markiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!