Optionaler Parameter bei Methode, der nur optional ist?

internet

Top Contributor
Hallo,

ich verwende einen Methodenaufruf einige 100 Mal in meinem Projekt.
Nun möchte ich einen zusätzlichen Parameter der Methode hinzufügen.

Das kann ich natürlich machen, aber dann muss ich auch bei 100 Stellen den Aufruf der Methode anpassen mit dem zusätzlichen Parameter.
Ich will das erst mal bei 20 Aufrufen ändern, sodass ich den Aufruf um den weiteren Parameter erweitere...

Gibt es denn eine Möglichkeit, dass ich einen weiteren Parameter der Methode hinzufüge, der bpsw. default - mäßig auf "true" ist?
Und ich dann innerhalb der Methode eben das Feld prüfe.

Andernfalls erstelle ich eben die gleiche Methode mit einem erweiterten Parameter und rufe diese dann bei den 20 Aufrufen auf - aber vllt. gibt es ja eine andere Möglichkeit?

Danke
 

httpdigest

Top Contributor
In Java gibt es keine Parameter mit optionalem Default-Wert wie z.B. bei C++.
Du kannst hier, wie du schon sagtest, eine weitere Methode mit demselben Namen und demselben Rückgabetyp wie deine bisherige Methode, aber einem weiteren Parameter, anlegen, also diese Methode *überladen*.
Wenn irgendwann immer mehr und mehr optionale Parameter hinzukommen könnten, ist es auch nicht unüblich, ein Parameter-Objekt als einzigen Parameter der Methode zu verwenden. Also eine neue Klasse, die alle möglichen Parameter als Instanzvariablen enthält und optionale Parameter z.B. mit einem vorinitialisierten Instanzfeld-Wert belegt.
Alle required Parameter könntest du z.B. über einen Konstruktor dieser Parameterobjekt-Klasse setzen lassen.
Das geht dann schon in Richtung Builder-Pattern.
 

fhoffmann

Top Contributor
Aber so schlimm ist das ja nicht.
Wenn du bisher hattest:
Java:
tuWas(String bisherigeParameter) {
    // bisheriger Code
}
dann schreibst du nun:
Java:
tuWas(String bisherigeParameter) {
    tuWas(bisherigeParameter, true);
}

tuWas(String bisherigeParameter, boolean neuerParameter) {
    // bisheriger Code, den du auf den neuen Parameter anpassen kannst
}

Weil diese Änderung so einfach ist, hat man wahrscheinlich bei der Erfindung von Java auch beschlossen, keine Default-Parameter einzuführen.
 

Neumi5694

Top Contributor
Anders machen's andere Sprachen ja auch nicht. Der kompilierte Code schaut bei denen nicht anders aus als wenn du in Java einfach 2 Methoden anlegst.
Es gibt allerdings eine Möglichkeit, ein Array optional anzugeben.

Java:
void  myMethod(int a, String s1, String... array) {
}

//Kann so aufgerufen werden.
void myCaller() {
    myMethod(14,"Hallo",new String[] {"Spencer","Wie","Geht's"}); //klassisch, wenn ein 'echtes' Array erwartet würde.
    myMethod(14,"Hallo","Spencer","Wie","Geht's"); //entspricht der oberen Zeile, aber ohne Array-Wrapper
    myMethod(14,"Hallo"); //erzeugt ein leeres Array.
}

Über den Aufruf in der ersten Zeile ist es möglich, ein null-Array zu übergeben, aber so gemein muss man schon sein wollen.
Ansonsten kann man sich in der Methode darauf verlassen, immer ein array ungleich null zu erhalten, das eben die Länge 0 hat, wenn keine Parameter angegeben wurden.

Man kann nur ein optionales Array angeben und es muss im Header an der letzten Stelle stehen.
 
Zuletzt bearbeitet:

Neumi5694

Top Contributor
Persönlich finde ich die Überladung mit erzwungener Aufteilung auf 2 Methoden übrigens besser als optionale Parameter. Man weiß immer sehr genau, was man da eigentlich macht und jede Methode ist eindeutig identifizierbar.
Stell dir mal vor, Java würde das unterstützen.
Java:
//Pseudocode
void myMethod(optional int optionalParameter 14) {
 
}

void myMethod() {
}

void caller() {
    //welche der Methoden würde hier aufgerufen? Die ohne Parameter oder die mit optionalem Parameter?
    myMethod();
}

Das Gedankenspiel kann man noch an die Spitze treiben, wenn man von mehreren optionalen Parametern ausgeht


Java:
//Pseudocode
void myMethod(optional int optionA 14, optional int optionB 15) {
}
void caller() {
   myMethod(17); // und nu? Welcher der beiden Werte wird gesetzt?
}

Ich denke, der Verzicht darauf war eine sehr bewusste Entscheidung zu Gunsten der Überladungen, nicht nur eine quick&dirty Lösung.
 
Zuletzt bearbeitet:

httpdigest

Top Contributor
Wobei ich fast behaupten würde, dass das Überladen von Methoden weniger dem Zweck dient, optionale Parameter einzuführen, sondern vielmehr "Adhoc-Polymorphismus" zu erlauben, also Methoden in ihrem Verhalten zu überladen basierend auf dem Parametertyp.
Z.B. eine append(int) Methode und eine append(String) Methode auf einem StringBuilder.
Die exzessive Verwendung von Methodenüberladung für mehr optionale Parameter würde ich genauso als Anti-Pattern sehen wie beim "Telescoping Constructor" Anti-Pattern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Variablen Optionaler Parameter auf der Kommandozeile Java Basics - Anfänger-Themen 12
B toString mit optionaler Ausgabe überrschreiben Java Basics - Anfänger-Themen 5
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
C Parameter in verschiedenen Anzahl und Typen Java Basics - Anfänger-Themen 6
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
BeginnerJava "Weihnachtsbäume" anzeigen: Höhe als Parameter Java Basics - Anfänger-Themen 1
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
X Default Parameter Java Basics - Anfänger-Themen 20
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
KogoroMori21 Variable im Parameter und Ohne Java Basics - Anfänger-Themen 5
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
I JAX-RS Mehrere Parameter in Query Java Basics - Anfänger-Themen 3
H Warum kann man keine Parameter in die main-Methode packen? Java Basics - Anfänger-Themen 4
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
J Apache Poi - createCell() Methode akzeptiert keinen Index aus for-schleife als Parameter Java Basics - Anfänger-Themen 4
P Parameter auf Datenformat überprüfen Java Basics - Anfänger-Themen 5
S Hamster Simulator rechnen lernen Parameter int Java Basics - Anfänger-Themen 6
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
C Java Methoden "Parameter" Problem Java Basics - Anfänger-Themen 16
W Parameter solange addieren bis 13 auftaucht Java Basics - Anfänger-Themen 11
L OOP Parameter mit der Draw-Methode übergeben Java Basics - Anfänger-Themen 11
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
L Methoden Übergabe von Parameter Java Basics - Anfänger-Themen 3
R Zu viele leere Parameter Java Basics - Anfänger-Themen 8
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
V Unbekannte Parameter Java Basics - Anfänger-Themen 1
J Input/Output Input als Parameter an Methoden übergeben Java Basics - Anfänger-Themen 23
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
U Mehrfacheingabe auf bestimmte Parameter prüfen Java Basics - Anfänger-Themen 8
A festgelegte Parameter Java Basics - Anfänger-Themen 11
PaperHat Methoden als Parameter anderer Methode verwenden Java Basics - Anfänger-Themen 11
D Interface Final für Parameter in überschriebenen Methoden? Java Basics - Anfänger-Themen 3
S Variable Parameter Java Basics - Anfänger-Themen 5
L Variablen Parameter bekommen Java Basics - Anfänger-Themen 13
M Methode mit Array als Parameter an Main übergeben Java Basics - Anfänger-Themen 1
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
B Webservice -> alle parameter bekommen von form Java Basics - Anfänger-Themen 2
K Klassenmethode mit übergebenen Parameter speichern Java Basics - Anfänger-Themen 7
I BigDecimal als Parameter verwenden Java Basics - Anfänger-Themen 3
J Parameter in main verwenden Java Basics - Anfänger-Themen 3
J Programm was üer Runtime.getRuntime gestartet wird erkennt String Parameter nicht Java Basics - Anfänger-Themen 0
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Parameter das übergeben wurde ändern? Java Basics - Anfänger-Themen 1
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
P Operatoren Parameter nicht auf null geprüft? Java Basics - Anfänger-Themen 16
D Name eines JMenue als Parameter übergeben Java Basics - Anfänger-Themen 20
K Dynamischen Supplier für Parameter Java Basics - Anfänger-Themen 12
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
W Methoden Methode ohne Parameter auf Instanz eines Objekts aufrufen? Java Basics - Anfänger-Themen 14
M Methode mit Parameter Java Basics - Anfänger-Themen 4
G Objektübergabe durch Parameter Java Basics - Anfänger-Themen 3
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
A Erste Schritte Methoden mit Parameter Java Basics - Anfänger-Themen 2
D Statische Objekte mit variablem Parameter Java Basics - Anfänger-Themen 1
N Klassen Klassen zwingende Parameter mitteilen Java Basics - Anfänger-Themen 4
L Methoden Methode Parameter vertauschen? Java Basics - Anfänger-Themen 3
C Auswertung Ausdruck mit Punknotation + Objekt als Parameter Java Basics - Anfänger-Themen 3
A Methoden Parameter optionalisieren möglich? - Wie? Java Basics - Anfänger-Themen 19
N Beliebig viele parameter Java Basics - Anfänger-Themen 3
F Methoden: Referenzvariable als Parameter Java Basics - Anfänger-Themen 4
J HttpGet Parameter mitgeben Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
T Klasse von erfahren wenn Obertyp Parameter ist Java Basics - Anfänger-Themen 6
J Klassen Fehler mit Parameter des Konstruktors bei einer Objekterzeugung Java Basics - Anfänger-Themen 5
V Parameter in synchronized-Blöcken verstehen Java Basics - Anfänger-Themen 2
M Klasse als Parameter übergeben Java Basics - Anfänger-Themen 7
S Methoden eine Instanz einer eigenen Klasse als parameter übergeben Java Basics - Anfänger-Themen 9
T unterschiedlich viele parameter übergeben Java Basics - Anfänger-Themen 5
V Methoden key value Parameter Java Basics - Anfänger-Themen 11
J Drucker parameter ändern Java Basics - Anfänger-Themen 9
F trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 0
O Basisklassen als Methoden-Parameter ähnlich, wie in C++ ? Java Basics - Anfänger-Themen 6
D GregorianCalendar als Parameter Java Basics - Anfänger-Themen 2
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2
E Problem beim Übergeben von Parameter an Methode Java Basics - Anfänger-Themen 2
O ArrayListe sortieren anhand zweier Parameter Java Basics - Anfänger-Themen 4
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
D Enum als Parameter Java Basics - Anfänger-Themen 6
T In main-Methode Parameter übergeben Java Basics - Anfänger-Themen 3
M Methode als Parameter übergeben Java Basics - Anfänger-Themen 16
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
T Parameter in Eigner Konsole Java Basics - Anfänger-Themen 2
ElfterDoktor Einen Objekt Attribute/Parameter geben & Auslesen Java Basics - Anfänger-Themen 4
R Erste Schritte Unterschied Array-Parameter zu Array als Parameter? Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben