999 Stimmen

Wie verwende ich optionale Parameter in Java?

Welche Spezifikation unterstützt optionale Parameter?

4voto

rybai Punkte 23

Sie können eine Klasse verwenden, die ähnlich wie ein Builder funktioniert und Ihre optionalen Werte wie folgt enthält.

public class Options {
    private String someString = "default value";
    private int someInt= 0;
    public Options setSomeString(String someString) {
        this.someString = someString;
        return this;
    }
    public Options setSomeInt(int someInt) {
        this.someInt = someInt;
        return this;
    }
}

public static void foo(Consumer<Options> consumer) {
    Options options = new Options();
    consumer.accept(options);
    System.out.println("someString = " + options.someString + ", someInt = " + options.someInt);
}

Verwenden Sie wie

foo(o -> o.setSomeString("something").setSomeInt(5));

Die Ausgabe ist

someString = something, someInt = 5

Um alle optionalen Werte auszulassen, müssten Sie es wie folgt aufrufen foo(o -> {}); oder, wenn Sie es vorziehen, können Sie eine zweite foo() Methode, die die optionalen Parameter nicht akzeptiert.

Mit diesem Ansatz können Sie optionale Werte in beliebiger Reihenfolge angeben, ohne dass es zu Unklarheiten kommt. Anders als bei varargs können Sie auch Parameter verschiedener Klassen angeben. Dieser Ansatz wäre sogar noch besser, wenn Sie Anmerkungen und Codegenerierung verwenden könnten, um die Options-Klasse zu erstellen.

3voto

Sophie Cooperman Punkte 396

Wenn es sich um einen API-Endpunkt handelt, besteht eine elegante Möglichkeit darin, "Spring"-Anmerkungen zu verwenden:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false, defaultValue = "hello") String id) { 
    return innerFunc(id);
}

Beachten Sie in diesem Fall, dass die innerFunc die Variable benötigt, und 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

1voto

Pellet Punkte 2056

Java unterstützt jetzt optionals in 1.8, ich bin mit der Programmierung auf Android stecken, so dass ich Nullen verwenden, bis ich den Code zu optionalen Typen verwenden refactor kann.

Object canBeNull() {
    if (blah) {
        return new Object();
    } else {
        return null;
    }
}

Object optionalObject = canBeNull();
if (optionalObject != null) {
    // new object returned
} else {
    // no new object returned
}

1voto

xproph Punkte 1061

Dies ist eine alte Frage, vielleicht sogar bevor die Option eingeführt wurde, aber heutzutage kann man einige Dinge berücksichtigen: - Methodenüberladung verwenden - Verwendung des Optional-Typs, der den Vorteil hat, dass NULLs nicht weitergegeben werden müssen Der optionale Typ wurde in Java 8 eingeführt, bevor er üblicherweise von Drittanbieter-Libs wie Googles Guava verwendet wurde. Die Verwendung von Optionalen als Parameter / Argumente kann als Überbeanspruchung angesehen werden, da der Hauptzweck darin bestand, sie als Rückgabezeitpunkt zu verwenden.

Ref: https://itcodehub.blogspot.com/2019/06/using-optional-type-in-java.html

0voto

Parvinder Singh Punkte 123

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 von einer mit Standardparametern verwenden.

Beispiel:

Stash(int size); 

Stash(int size, int initQuantity);

http://parvindersingh.webs.com/apps/forums/topics/show/8856498-java-how-to-set-default-parameters-values-like-c-

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X