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 unchar
, mais pas unString
...?
Réponses
Trop de publicités?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;
}
}
}
Vous pouvez réellement switch
sur enum
s, mais vous ne pouvez pas switch
sur String
s jusqu'à ce que Java 7. Vous pourriez envisager d'utiliser des polymorphes de la méthode d'expédition avec Java enum
s plutôt qu'explicite switch
. Notez que enum
s sont des objets en Java, et pas seulement des symboles pour int
s 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();
}
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.
-
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; } } }
-
Les commutateurs pour les chaînes sont implémentés dans Java 7.
Découvrez toutes les nouvelles fonctionnalités ici .
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 ..