11
votes

Alternative à l'étui de commutation en Java

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.


3 commentaires

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?


14 Réponses :


0
votes

Que veux-tu faire? Pourquoi ne pas suffisamment de basculement?

La réponse rapide est: Utilisez si-ele


0 commentaires

0
votes
    if () {}
    else if () {}
...
    else if () {}
?But I wouldn't say it is better...

0 commentaires

1
votes

une série laid de si, sinon si, sinon ?


0 commentaires

0
votes

Que diriez-vous d'un si (avec sinon si et sinon ) Tandis que commutateur vous permettra uniquement de basculer en utilisant l'égalité des types d'entier ou d'énumération, si vous permet d'utiliser une logique booléenne.


2 commentaires

Char, octet, courte peut également être utilisé dans les commutateurs.


Oui, mais ils peuvent aussi être en toute sécurité (automatiquement) lancé à int



5
votes

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.



0
votes

Vous pouvez toujours remplacer un commutateur avec si, sinon si, si, si, si ... , bien que je ne vois pas pourquoi vous voudriez. Selon le contexte Switch S peut aussi parfois être remplacé par des tableaux ou des hachons.


0 commentaires


19
votes

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(); }


5 commentaires

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 ().



1
votes

ou on pourrait imaginer une sorte de cas de commutation dynamique: xxx


0 commentaires

1
votes

Je suppose que "le code de nettoyage" a un bon chapitre selon le commutateur / case vs. Si / else.

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.


0 commentaires

0
votes

Si les chaînes sont statiques, vous pouvez faire une énumération. et faire un commutateur dessus.


0 commentaires

1
votes

i Publier un cas typique Comment j'ai remplacé le boîtier de commutation avec ENUM.

Avant le refacteur, j'ai énumé modèleType : xxx

et fonction : xxx


après refacteur Motiftypes modifié à: xxx

et fonction simplifier à: xxx


1 commentaires

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?



1
votes

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
}}


1 commentaires

Pouvez-vous donner une certaine référence pour soutenir la réclamation HASHMAP est considérée comme une mémoire conviviale ? Si vous le pouvez, veuillez éditer votre réponse pour le lier ici.



1
votes

Pour une alternative à la déclaration de commutation, je pense que la meilleure solution utilisera une Enum forte>. Par exemple: Considérez le cas ci-dessous: -

EnumExample.OPTION1.execute();


0 commentaires