159 votes

Activer Enum en Java

Doublons Possibles:
Erreur de Compilation - commutateur avec enum
Pourquoi dois-je obtenir un Enum référence constante ne peut pas être qualifié dans une affaire d'étiquette?

Pourquoi ne pouvez-vous pas basculer sur un enum en Java? Il semble assez simple à faire et aurait pour conséquence de rendre certaines pratiques du code. Aussi cette question pourrait s'appliquer à l' String'. Vous pouvez basculer sur un char, mais pas un String ...?

280voto

CoolBeans Points 11615

Vous pouvez certainement activer des enums. Un exemple posté à partir des tutoriels java.

 public enum Day {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
    THURSDAY, FRIDAY, SATURDAY 
}

public class EnumTest {
    Day day;

    public EnumTest(Day day) {
        this.day = day;
    }

    public void tellItLikeItIs() {
        switch (day) {
            case MONDAY: System.out.println("Mondays are bad.");
                     break;

            case FRIDAY: System.out.println("Fridays are better.");
                     break;

            case SATURDAY:
            case SUNDAY: System.out.println("Weekends are best.");
                     break;

            default: System.out.println("Midweek days are so-so.");
                     break;
        }
    }
}   
 

86voto

Greg Mattes Points 9578

Vous pouvez réellement switch sur enums, mais vous ne pouvez pas switch sur Strings jusqu'à ce que Java 7. Vous pourriez envisager d'utiliser des polymorphes de la méthode d'expédition avec Java enums plutôt qu'explicite switch. Notez que enums sont des objets en Java, et pas seulement des symboles pour ints comme s'ils sont en C/C++. Vous pouvez avoir une méthode sur un enum type, alors au lieu d'écrire un switch, il suffit d'appeler la méthode - une ligne de code: fait!

enum MyEnum {
    SOME_ENUM_CONSTANT {
        @Override
        public void method() {
            System.out.println("first enum constant behavior!");
        }
    },
    ANOTHER_ENUM_CONSTANT {
        @Override
        public void method() {
            System.out.println("second enum constant behavior!");
        }
    }; // note the semi-colon after the final constant, not just a comma!
    public abstract void method(); // could also be in an interface that MyEnum implements
}

void aMethodSomewhere(final MyEnum e) {
    doSomeStuff();
    e.method(); // here is where the switch would be, now it's one line of code!
    doSomeOtherStuff();
}

26voto

Michael Lowman Points 1500

Tout d'abord, vous pouvez basculer sur les enums en Java. Je suppose que vous avez voulu dire que vous ne pouvez pas, mais vous pouvez. les caractères ont une plage définie de valeurs, de sorte qu'il est facile de comparer. Les chaînes peuvent être n'importe quoi.

Une instruction switch est généralement mis en œuvre comme un saut de la table dans le sous-jacent de la compilation, ce qui n'est possible qu'avec un ensemble fini de valeurs. C# peut basculer sur les cordes, mais il provoque une baisse de la performance en raison d'un saut de la table ne peut pas être utilisé.

Les nouvelles versions de Java de soutien String commutateurs ont les mêmes caractéristiques.

25voto

aioobe Points 158466
  • Activer les enums fonctionne bien.

     enum MyEnum { CONST_ONE, CONST_TWO }
    
    class Test {
        public static void main(String[] args) {
            MyEnum e = MyEnum.CONST_ONE;
    
            switch (e) {
            case CONST_ONE: System.out.println(1); break;
            case CONST_TWO: System.out.println(2); break;
            }
    
        }
    }
     

    ideone.com démo

  • Les commutateurs pour les chaînes sont implémentés dans Java 7.

    Découvrez toutes les nouvelles fonctionnalités ici .

17voto

brayne Points 566

Vous utilisez peut-être les énumérations de manière incorrecte dans les cas de commutation. En comparaison avec l'exemple ci-dessus de CoolBeans, vous pouvez effectuer les tâches suivantes:

 switch(day) {
case (Day.MONDAY):
//Something..
break;

case (Day.FRIDAY):
//Something friday
break;
}
 

Assurez-vous que vous utilisez les valeurs enum réelles au lieu de EnumType.EnumValue

Eclipse souligne cette erreur cependant ..

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X