Comment utiliser les paramètres facultatifs en Java? Quelle spécification prend en charge les paramètres facultatifs?
java
optional-parameters
Mike Pone
la source
la source
Il existe plusieurs façons de simuler des paramètres facultatifs en Java:
Surcharge de méthode.
L'une des limites de cette approche est qu'elle ne fonctionne pas si vous avez deux paramètres facultatifs du même type et que l'un d'eux peut être omis.
Varargs.
a) Tous les paramètres facultatifs sont du même type:
b) Les types de paramètres facultatifs peuvent être différents:
Le principal inconvénient de cette approche est que si les paramètres facultatifs sont de types différents, vous perdez la vérification de type statique. De plus, si chaque paramètre a une signification différente, vous avez besoin d'un moyen de les distinguer.
Nulls. Pour remédier aux limites des approches précédentes, vous pouvez autoriser les valeurs nulles, puis analyser chaque paramètre dans un corps de méthode:
Maintenant, toutes les valeurs des arguments doivent être fournies, mais celles par défaut peuvent être nulles.
Classe facultative. Cette approche est similaire aux valeurs null, mais utilise la classe facultative Java 8 pour les paramètres qui ont une valeur par défaut:
Facultatif rend explicite un contrat de méthode pour un appelant, cependant, on peut trouver une telle signature trop verbeuse.
Mise à jour: Java 8 inclut la classe
java.util.Optional
prête à l'emploi, il n'est donc pas nécessaire d'utiliser la goyave pour cette raison particulière dans Java 8. Le nom de la méthode est cependant un peu différent.Modèle de générateur. Le modèle de générateur est utilisé pour les constructeurs et est implémenté en introduisant une classe de générateur distincte:
Plans. Lorsque le nombre de paramètres est trop grand et que la plupart des valeurs par défaut sont généralement utilisées, vous pouvez passer des arguments de méthode sous forme de mappage de leurs noms / valeurs:
En Java 9, cette approche est devenue plus simple:
Veuillez noter que vous pouvez combiner n'importe laquelle de ces approches pour obtenir un résultat souhaitable.
la source
a
variable soit une chaîne (le cast est correct).Optional
as comme paramètre dans l'une des options, cette réponse est très bonne.Il existe des paramètres facultatifs avec Java 5.0. Déclarez simplement votre fonction comme ceci:
vous pouvez appeler avec
doSomething();
oudoSomething(true);
maintenant.la source
doSomething() { doSomething(true); }
pas de tableaux à traiter, pas d'ambiguïtéVous pouvez utiliser quelque chose comme ceci:
La
params
variable est facultative. Il est traité comme un tableau d'objets nullable.Étrangement, je n'ai rien trouvé à ce sujet dans la documentation, mais ça marche!
C'est "nouveau" dans Java 1.5 et au-delà (non pris en charge dans Java 1.4 ou version antérieure).
Je vois que l'utilisateur bhoot l'a mentionné aussi ci-dessous.
la source
Malheureusement, Java ne prend pas directement en charge les paramètres par défaut.
Cependant, j'ai écrit un ensemble d'annotations JavaBean, et l'une d'entre elles prend en charge les paramètres par défaut comme les suivants:
Le processeur d'annotation génère les surcharges de méthode pour prendre correctement en charge cela.
Voir http://code.google.com/p/javadude/wiki/Annotations
Exemple complet sur http://code.google.com/p/javadude/wiki/AnnotationsDefaultParametersExample
la source
Il n'y a pas de paramètres facultatifs en Java. Ce que vous pouvez faire, c'est surcharger les fonctions, puis passer les valeurs par défaut.
la source
VarArgs et surcharge ont été mentionnés. Une autre option est un modèle Builder, qui ressemblerait à ceci:
Bien que ce modèle soit plus approprié lorsque vous avez besoin de paramètres facultatifs dans un constructeur.
la source
Dans JDK> 1.5, vous pouvez l'utiliser comme ceci;
la source
Vous pouvez faire quelque chose en utilisant une surcharge de méthode comme celle-ci.
Vous pouvez également utiliser l'annotation @Nullable
passez simplement null comme premier paramètre.
Si vous passez une variable de même type, vous pouvez utiliser ceci
la source
Version courte :
En utilisant trois points :
(basé sur la réponse de @ VitaliiFedorenko)
la source
La surcharge est très bien, mais s'il y a beaucoup de variables qui nécessitent une valeur par défaut, vous vous retrouverez avec:
Je suggère donc d'utiliser l'argument variable fourni par Java. Voici un lien pour l'explication.
la source
Vous pouvez utiliser une classe qui fonctionne un peu comme un générateur pour contenir vos valeurs facultatives comme celle-ci.
Utilisez comme
La sortie est
Pour ignorer toutes les valeurs facultatives, vous devez l'appeler comme
foo(o -> {});
ou si vous préférez, vous pouvez créer une deuxièmefoo()
méthode qui ne prend pas les paramètres facultatifs.En utilisant cette approche, vous pouvez spécifier des valeurs facultatives dans n'importe quel ordre sans aucune ambiguïté. Vous pouvez également avoir des paramètres de différentes classes contrairement aux varargs. Cette approche serait encore meilleure si vous pouvez utiliser des annotations et la génération de code pour créer la classe Options.
la source
Java prend désormais en charge les options dans la version 1.8, je suis coincé avec la programmation sur Android, donc j'utilise des valeurs nulles jusqu'à ce que je puisse refactoriser le code pour utiliser des types facultatifs.
la source
Les arguments par défaut ne peuvent pas être utilisés en Java. Où en C #, C ++ et Python, nous pouvons les utiliser.
En Java, nous devons utiliser 2 méthodes (fonctions) au lieu d'une avec des paramètres par défaut.
Exemple:
http://parvindersingh.webs.com/apps/forums/topics/show/8856498-java-how-to-set-default-parameters-values-like-c-
la source
C'est une vieille question peut-être même avant l'introduction du type facultatif réel, mais de nos jours, vous pouvez considérer quelques choses: - utiliser la surcharge de méthode - utiliser le type facultatif qui a l'avantage d'éviter de passer des NULL autour Le type facultatif a été introduit dans Java 8 avant qu'il ne soit généralement utilisé à partir d'une bibliothèque tierce telle que Google's Guava. L'utilisation de paramètres / arguments facultatifs peut être considérée comme une surutilisation car le but principal était de l'utiliser comme heure de retour.
Réf: https://itcodehub.blogspot.com/2019/06/using-optional-type-in-java.html
la source
Nous pouvons faire des paramètres facultatifs par surcharge de méthode ou en utilisant DataType ...
| * | Surcharge de méthode:
Le moyen le plus simple est
| * | DataType ... peut être un paramètre facultatif
la source
RetDtaTyp
... sérieusement? Est-ceRetDataType
trop difficile à taper?Si vous prévoyez d'utiliser une interface avec plusieurs paramètres , vous pouvez utiliser le modèle structurel suivant et implémenter ou remplacer apply - une méthode basée sur vos besoins .
la source
S'il s'agit d'un point de terminaison API, une méthode élégante consiste à utiliser des annotations "Spring":
Notez dans ce cas que le innerFunc aura besoin de la variable, et comme ce n'est pas un point de terminaison api, ne peut pas utiliser cette annotation Spring pour la rendre facultative. Référence: https://www.baeldung.com/spring-request-param
la source