Heim >Java >javaLernprogramm >Wie können optionale Parameter in Java simuliert werden?

Wie können optionale Parameter in Java simuliert werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-15 13:54:19179Durchsuche

How Can Optional Parameters Be Simulated in Java?

Simulieren optionaler Parameter in Java

Java unterstützt optionale Parameter nicht nativ. Es gibt jedoch verschiedene Möglichkeiten, diese Funktionalität zu simulieren.

Methodenüberladung

Durch das Überladen von Methoden mit unterschiedlichen Parameterlisten können Sie optionale Parameter angeben, indem Sie in einigen Fällen einen Standardwert angeben Methoden. Zum Beispiel:

void foo(String a, Integer b) {
    //...
}

void foo(String a) {
    foo(a, 0); // Here, 0 is the default value for b
}

foo("a", 2);
foo("a");  // Uses the default value for b

Dieser Ansatz wird jedoch umständlich, wenn mehrere optionale Parameter desselben Typs vorhanden sind.

Varargs

Varargs können sein Wird zur Simulation optionaler Parameter verwendet, wenn alle optionalen Parameter gleich sind Typ:

void foo(String a, Integer... b) {
    Integer b1 = b.length > 0 ? b[0] : 0;
    Integer b2 = b.length > 1 ? b[1] : 0;
    //...
}

foo("a");
foo("a", 1, 2);

Alternativ können Varargs auch mit anderen Parametertypen verwendet werden, dies erfordert jedoch zusätzliche Prüfungen:

void foo(String a, Object... b) {
    Integer b1 = 0;
    String b2 = "";
    if (b.length > 0) {
        if (!(b[0] instanceof Integer)) { 
            throw new IllegalArgumentException("...");
        }
        b1 = (Integer)b[0];
    }
    if (b.length > 1) {
        if (!(b[1] instanceof String)) { 
            throw new IllegalArgumentException("...");
        }
        b2 = (String)b[1];
        //...
    }
    //...
}

foo("a");
foo("a", 1);
foo("a", 1, "b2");  // Note that the order of arguments matters

Nulls

Die Verwendung von Nullwerten für optionale Parameter ist eine weitere Option:

void foo(String a, Integer b, Integer c) {
    b = b != null ? b : 0;
    c = c != null ? c : 0;
    //...
}

foo("a", null, 2);

Dies muss jedoch überprüft werden für Nullwerte im Methodenkörper.

Optionale Klasse

Java 8 führte die optionale Klasse ein, die zur Darstellung optionaler Werte verwendet werden kann:

void foo(String a, Optional<Integer> bOpt) {
    Integer b = bOpt.isPresent() ? bOpt.get() : 0;
    //...
}

foo("a", Optional.of(2));
foo("a", Optional.<Integer>absent());

Builder-Muster

Das Builder-Muster ist ein weiterer Ansatz, der normalerweise in Verbindung mit verwendet wird Konstruktoren:

class Foo {
    private final String a; 
    private final Integer b;

    Foo(String a, Integer b) {
      this.a = a;
      this.b = b;
    }

    //...
}

class FooBuilder {
  private String a = ""; 
  private Integer b = 0;
  
  FooBuilder setA(String a) {
    this.a = a;
    return this;
  }

  FooBuilder setB(Integer b) {
    this.b = b;
    return this;
  }

  Foo build() {
    return new Foo(a, b);
  }
}

Foo foo = new FooBuilder().setA("a").build();

Maps

Beim Umgang mit einer großen Anzahl optionaler Parameter kann die Verwendung einer Map zur Übergabe dieser als Name-Wert-Paare praktisch sein:

void foo(Map<String, Object> parameters) {
    String a = "";
    Integer b = 0;
    if (parameters.containsKey("a")) { 
        if (!(parameters.get("a") instanceof Integer)) { 
            throw new IllegalArgumentException("...");
        }
        a = (Integer)parameters.get("a");
    }
    if (parameters.containsKey("b")) { 
        //...
    }
    //...
}

foo(ImmutableMap.<String, Object>of(
    "a", "a",
    "b", 2, 
    "d", "value")); 

In Java 9 wurde der Zugriff auf Parameterwerte aus einer Karte einfacher:

// ...
static <T> T getParm(Map<String, Object> map, String key, T defaultValue) {
  return (map.containsKey(key)) ? (T) map.get(key) : defaultValue;
}
// ...

void foo(Map<String, Object> parameters) {
  String a = getParm(parameters, "a", "");
  int b = getParm(parameters, "b", 0);
  // ...
}

foo(Map.of("a","a",  "b",2,  "d","value"));

Diese Ansätze bieten verschiedene Optionen zur Simulation optionaler Parameter in Java, sodass Sie die für Ihre spezifischen Anforderungen am besten geeignete Methode auswählen können.

Das obige ist der detaillierte Inhalt vonWie können optionale Parameter in Java simuliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn