Maison > Java > javaDidacticiel > Comment puis-je implémenter des paramètres facultatifs en Java ?

Comment puis-je implémenter des paramètres facultatifs en Java ?

Barbara Streisand
Libérer: 2024-12-21 12:01:10
original
158 Les gens l'ont consulté

How Can I Implement Optional Parameters in Java?

Paramètres facultatifs en Java

Les paramètres facultatifs permettent aux méthodes de recevoir un nombre variable d'arguments. Il existe plusieurs façons d'implémenter ce comportement en Java :

Surcharge de méthodes

Créez plusieurs méthodes avec le même nom mais des listes d'arguments différentes. Les paramètres facultatifs peuvent être omis.

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

void foo(String a) {
    foo(a, 0); // Default value for b
}

foo("a", 2);
foo("a");
Copier après la connexion

Varargs

Utilisez des listes d'arguments de longueur variable pour spécifier des paramètres facultatifs. Le type des paramètres facultatifs doit être le même.

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);
Copier après la connexion

Nulls

Autoriser les paramètres facultatifs à être nuls. Recherchez les valeurs nulles dans le corps de la méthode.

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

foo("a", null, 2);
Copier après la connexion

Classe facultative

Utilisez la classe facultative de Java 8 pour indiquer les paramètres avec des valeurs par défaut.

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

foo("a", Optional.of(2));
foo("a", Optional.empty());
Copier après la connexion

Modèle de constructeur

Créer une classe de constructeur distincte avec des setters fluides pour les paramètres facultatifs.

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();
Copier après la connexion

Cartes

Utilisez une carte pour transmettre les paramètres facultatifs par paires nom/valeur.

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

foo(Map.of("a", "a", "b", 2, "d", "value")); 
Copier après la connexion

Ces approches peut être combiné pour répondre à des besoins spécifiques.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal