Y a-t-il un moyen alternatif de mettre en œuvre un étui de commutation en Java autre que si sinon qui ne semble pas bon. Un ensemble de valeurs sera là en combinaison, selon la méthode de sélection correspondante doit être exécutée. P>
14 Réponses :
Que veux-tu faire? Pourquoi ne pas suffisamment de basculement? P>
La réponse rapide est: Utilisez si-ele p>
if () {} else if () {} ... else if () {} ?But I wouldn't say it is better...
une série laid de si, sinon si, sinon code>? p>
Que diriez-vous d'un si code> (avec
sinon si code> et
sinon code>) Tandis que
commutateur code> vous permettra uniquement de basculer en utilisant l'égalité des types d'entier ou d'énumération,
si code> vous permet d'utiliser une logique booléenne. P>
Char, octet, courte peut également être utilisé dans les commutateurs.
Oui, mais ils peuvent aussi être en toute sécurité (automatiquement) lancé à int
refactoring Votre code pour utiliser le polymorphisme pourrait se débarrasser de la nécessité d'une instruction de commutation. Cependant, il existe des utilisations légitimes pour le commutateur, ce qui dépend de votre situation. P>
Oui, il s'agit d'un refactoring bien connu - refactoring.com/catalog/replaceconditionalwithpolymorphism.h tml a>
Joli lien. On dirait qu'il y a beaucoup de bons dans le catalogue.
Vous pouvez toujours remplacer un commutateur avec si, sinon si, si, si, si ... code>, bien que je ne vois pas pourquoi vous voudriez. Selon le contexte
Switch code> S peut aussi parfois être remplacé par des tableaux ou des hachons. P>
Si vous avez beaucoup de déclarations commutateur / cas autour de votre code et ils vont vous rendre fous
Vous pouvez opter pour le refactoring.
0 commentaires
Vous avez probablement des difficultés à la nécessité de constants de l'affaire. Typiquement, c'est une odeur de code, mais il y a des choses que vous pouvez faire. Vous voudrez peut-être élever et mettre un lien vers une autre question qui détaille pourquoi vous essayez de changer.
if (map.contains(key)) { map.get(key).doSomething(); }
Vous pouvez également utiliser Enums si la constante est une douleur.
à la recherche de quelque chose comme ça.
Pourquoi la contient puis obtenez-vous, votre lecture de la carte deux fois. Commande Commentaire = map.get (clé); si (null! = commande) {... command.execute (); }
Selon la mise en œuvre, la contient peut ne pas être trop chère. Savoir s'il y a une entrée vous permet également de gérer une action «par défaut» de manière judicieuse lisible. Optimisation prématurée et tout cela. Ceci est probablement une gueule de bois de mon faire cela assez souvent en Perl pour éviter toute autoovivité ...
Pour prendre l'Enums un pas plus loin, vous pouvez configurer chaque constante enum avec une méthode de manipulation, ce qui en fait de la valeur.Dosomtation ().
ou on pourrait imaginer une sorte de cas de commutation dynamique:
Je suppose que "le code de nettoyage" a un bon chapitre selon le commutateur / case vs. Si / else. P>
En outre: Je pense qu'il est logique de décider si vous pouvez réduire le "bruit" et rendre le nettoyeur de code à l'aide d'un boîtier de commutation, d'un polymorphisme ou même d'un bon OL 'si / sinon. Le nombre de cas joue un rôle majeur ici, je suppose. P>
Si les chaînes sont statiques, vous pouvez faire une énumération. et faire un commutateur dessus. p>
i Publier un cas typique Comment j'ai remplacé le boîtier de commutation avec ENUM.
Avant le refacteur, j'ai énumé et fonction : p> après refacteur et fonction simplifier à: p> modèleType code>: p>
Motiftypes code> modifié à: p>
Je l'aime mais que cela ne remplace pas simplement la sélection avec une charge de si? Et n'est pas si le nouveau code sentez-vous?
HASHMAP est considéré comme une mémoire conviviale, vous pouvez donc utiliser Enum à cet effet.
Exemple: P>
class EnumExample4{ enum Season{ WINTER(5), SPRING(10), SUMMER(15), FALL(20); private int value; private Season(int value){ this.value=value; } } public static void main(String args[]){ System.out.println(Season.WINTER.value); //This gives you 5 }}
Pouvez-vous donner une certaine référence pour soutenir la réclamation HASHMAP est considérée comme une mémoire conviviale i>? Si vous le pouvez, veuillez éditer votre réponse pour le lier ici.
Pour une alternative à la déclaration de commutation, je pense que la meilleure solution utilisera une EnumExample.OPTION1.execute();
Que voulez-vous dire lorsque vous dites que "un ensemble de valeurs sera là à combo"?
Déjà posé une question similaire Stackoverflow.com/Questtions/ 126409 / ...
@CDB: Alors pourquoi l'avez-vous demandé? Qu'est-ce que les réponses précédentes ne vous ont pas dit?