Wie verwende ich optionale Parameter in Java? Welche Spezifikation unterstützt optionale Parameter?
java
optional-parameters
Mike Pone
quelle
quelle
Es gibt verschiedene Möglichkeiten, optionale Parameter in Java zu simulieren:
Methodenüberladung.
Eine der Einschränkungen dieses Ansatzes besteht darin, dass er nicht funktioniert, wenn Sie zwei optionale Parameter desselben Typs haben und jeder von ihnen weggelassen werden kann.
Varargs.
a) Alle optionalen Parameter sind vom gleichen Typ:
b) Die Arten der optionalen Parameter können unterschiedlich sein:
Der Hauptnachteil dieses Ansatzes besteht darin, dass bei statischen Parametern unterschiedlicher Typen die statische Typprüfung verloren geht. Wenn jeder Parameter eine andere Bedeutung hat, müssen Sie ihn auf irgendeine Weise unterscheiden.
Nullen. Um die Einschränkungen der vorherigen Ansätze zu beseitigen, können Sie Nullwerte zulassen und dann jeden Parameter in einem Methodenkörper analysieren:
Jetzt müssen alle Argumentwerte angegeben werden, die Standardwerte können jedoch null sein.
Optionale Klasse. Dieser Ansatz ähnelt Nullen, verwendet jedoch die optionale Klasse Java 8 für Parameter mit einem Standardwert:
Optional wird ein Methodenvertrag für einen Anrufer explizit festgelegt. Eine solche Signatur ist jedoch möglicherweise zu ausführlich.
Update: Java 8 enthält die sofort einsatzbereite Klasse
java.util.Optional
, sodass in Java 8 aus diesem speziellen Grund keine Guave verwendet werden muss. Der Methodenname ist jedoch etwas anders.Builder-Muster. Das Builder-Muster wird für Konstruktoren verwendet und durch Einführung einer separaten Builder-Klasse implementiert:
Karten. Wenn die Anzahl der Parameter zu groß ist und für die meisten Standardwerte normalerweise verwendet wird, können Sie Methodenargumente als Zuordnung ihrer Namen / Werte übergeben:
In Java 9 wurde dieser Ansatz einfacher:
Bitte beachten Sie, dass Sie jeden dieser Ansätze kombinieren können, um ein wünschenswertes Ergebnis zu erzielen.
quelle
a
Variable ein String ist (Cast ist korrekt).Optional
als Parameter in einer der Optionen ist diese Antwort sehr gut.In Java 5.0 gibt es optionale Parameter. Deklarieren Sie einfach Ihre Funktion wie folgt:
Sie könnten mit
doSomething();
oderdoSomething(true);
jetzt anrufen .quelle
doSomething() { doSomething(true); }
keine Arrays, keine MehrdeutigkeitSie können so etwas verwenden:
Die
params
Variable ist optional. Es wird als nullbares Array von Objekten behandelt.Seltsamerweise konnte ich in der Dokumentation nichts dazu finden, aber es funktioniert!
Dies ist "neu" in Java 1.5 und höher (wird in Java 1.4 oder früher nicht unterstützt).
Ich sehe, dass Benutzer bhoot dies auch unten erwähnt hat.
quelle
Leider unterstützt Java Standardparameter nicht direkt.
Ich habe jedoch eine Reihe von JavaBean-Anmerkungen geschrieben, von denen eine Standardparameter wie die folgenden unterstützt:
Der Anmerkungsprozessor generiert die Methodenüberladungen, um dies ordnungsgemäß zu unterstützen.
Siehe http://code.google.com/p/javadude/wiki/Annotations
Vollständiges Beispiel unter http://code.google.com/p/javadude/wiki/AnnotationsDefaultParametersExample
quelle
In Java gibt es keine optionalen Parameter. Sie können die Funktionen überladen und dann Standardwerte übergeben.
quelle
VarArgs und Überladung wurden erwähnt. Eine andere Option ist ein Builder-Muster, das ungefähr so aussehen würde:
Obwohl dieses Muster am besten geeignet ist, wenn Sie optionale Parameter in einem Konstruktor benötigen.
quelle
In JDK> 1.5 können Sie es so verwenden;
quelle
Sie können dies mit einer solchen Methodenüberladung tun.
Sie können auch die Annullation @Nullable verwenden
Übergeben Sie einfach null als ersten Parameter.
Wenn Sie dieselbe Typvariable übergeben, können Sie diese verwenden
quelle
Kurzfassung:
Mit drei Punkten :
(basierend auf der Antwort von @ VitaliiFedorenko)
quelle
Überladen ist in Ordnung, aber wenn es viele Variablen gibt, die einen Standardwert benötigen, erhalten Sie Folgendes:
Daher würde ich vorschlagen, das von Java bereitgestellte Variablenargument zu verwenden. Hier ist ein Link zur Erklärung.
quelle
Sie können eine Klasse verwenden, die ähnlich wie ein Builder funktioniert, um Ihre optionalen Werte wie diese zu enthalten.
Verwenden Sie wie
Ausgabe ist
Um alle optionalen Werte zu überspringen, die Sie wie folgt aufrufen
foo(o -> {});
möchten, oder wenn Sie dies bevorzugen, können Sie eine zweitefoo()
Methode erstellen , die die optionalen Parameter nicht verwendet.Mit diesem Ansatz können Sie optionale Werte in beliebiger Reihenfolge ohne Mehrdeutigkeit angeben. Im Gegensatz zu varargs können Sie auch Parameter verschiedener Klassen verwenden. Dieser Ansatz wäre sogar noch besser, wenn Sie zum Erstellen der Options-Klasse Anmerkungen und Codegenerierung verwenden können.
quelle
Java unterstützt jetzt Optionals in 1.8. Ich bin mit der Programmierung auf Android festgefahren, daher verwende ich Nullen, bis ich den Code umgestalten kann, um optionale Typen zu verwenden.
quelle
Standardargumente können in Java nicht verwendet werden. Wo in C #, C ++ und Python können wir sie verwenden.
In Java müssen wir 2 Methoden (Funktionen) anstelle einer mit Standardparametern verwenden.
Beispiel:
http://parvindersingh.webs.com/apps/forums/topics/show/8856498-java-how-to-set-default-parameters-values-like-c-
quelle
Dies ist eine alte Frage, vielleicht noch bevor der eigentliche optionale Typ eingeführt wurde, aber heutzutage können Sie einige Dinge berücksichtigen: - Überladen von Methoden verwenden - Optionalen Typ verwenden, der den Vorteil hat, dass NULL-Werte nicht um den optionalen Typ herum übergeben werden, wurde in Java 8 eingeführt, bevor er normalerweise verwendet wurde von Drittanbietern wie Googles Guava. Die Verwendung von optional als Parameter / Argumente kann als Überbeanspruchung angesehen werden, da der Hauptzweck darin bestand, sie als Rückgabezeit zu verwenden.
Ref: https://itcodehub.blogspot.com/2019/06/using-optional-type-in-java.html
quelle
Wir können optionale Parameter durch Überladen von Methoden oder Verwenden von DataType festlegen ...
| * | Methodenüberladung:
Der einfachste Weg ist
| * | DataType ... kann ein optionaler Parameter sein
quelle
RetDtaTyp
... Ernsthaft? IstRetDataType
zu schwer zu tippen?Wenn Sie eine Schnittstelle mit mehreren Parametern verwenden möchten , können Sie das folgende Strukturmuster verwenden und apply implementieren oder überschreiben - eine Methode, die auf Ihren Anforderungen basiert .
quelle
Wenn es sich um einen API-Endpunkt handelt, können Sie auf elegante Weise "Spring" -Anmerkungen verwenden:
Beachten Sie in diesem Fall, dass für innerFunc die Variable erforderlich ist. Da es sich nicht um einen API-Endpunkt handelt, kann diese Spring-Annotation nicht verwendet werden, um sie optional zu machen. Referenz: https://www.baeldung.com/spring-request-param
quelle