Sinn: final in Parameterliste verwenden

ernst

Top Contributor
Hallo allerseits,
Welchen Sinn hat es den Bezeichner final vor einem Parameter in einer Methode zu verwenden ?
Siehe Programm unten.
Bis jetzt dachte ich, damit der Parameter nicht verändert werden kann, d.h. dass
z.number=z.number+1;
eine Fehlermeldung des Compilers verursacht.
Das stimmt aber nicht.
Siehe unten.

mfg
er


Java:
package parameteruebergabe10;

public class Startklasse {
    public static void main(String[] args) {
        Zahl myZahl = new Zahl(5);
        rauf(myZahl);
        myZahl.printAllAttributes();
    }
   
    public static void rauf(final Zahl z){
        z.number=z.number+1;
    }
}

class Zahl{
    public int number;
   
    public Zahl(int z){
        number=z;
    }
   
    public void printAllAttributes(){
        System.out.println("Zahl="+number);
    }
}
 
Du kannst den Parameter nicht neu zuweisen:

Java:
public static void rauf(final Zahl z){
        z = new Zahl(42); //Compile-Fehler
    }


Objekte sind immer veränderlich, wenn sie es nicht selbst verhindern.
 
Zuletzt bearbeitet:
Es hilft nur dabei, den Parameter einer Methode nicht aus Versehen auf einen ganz anderen Wert umzubiegen. Das ist hilfreich bei etwas längeren Methoden, die man verstehen oder anpassen möchte und man davon ausging, dass der Parameter immer den Wert des tatsächlichen aktuellen Argumentes hat, mit dem die Methode aufgerufen wurde. Erstaunt kann man aber beim Debuggen meist feststellen, dass dem nicht immer so ist, z.B. wenn man solch einen Code schreibt:
Java:
public Benutzer findeBenutzerMitNachnamen(String nachname) {
  // ... mehr Code
  // irgendwo im Code versteckt:
  nachname = namename.toLowerCase();
  // ... mehr Code
}
Wenn das eventuell dann irgendwann einmal zu einer Datenbankabfrage führt eventuell mit einem einfachen '=' Vergleich, und in der Tabelle der tatsächliche unkonvertierte Nachname steht, dann wundert man sich, wenn man stundenlang in der Datenbanktabelle schaut, der Fehler aber eigentlich in dem Umbiegen des Methodenparameters ist.
 

Neue Themen


Zurück
Oben