Dans l'instruction de commutation Java, lorsque enum est utilisé comme expression, aucun nom qualifié n'est donné. C'était étrange que la compilation réussisse quand il y avait deux ou plusieurs constantes identiques, alors je l'ai vérifiée. Tout d'abord, vous n'avez pas besoin de le modifier, vous pouvez donc l'utiliser tel quel sans vous en soucier.
Supposons que vous ayez une énumération comme celle-ci.
FoodType.java
public enum FoodType {
RICE,
BREAD,
OTHER,
}
Main.java
import lombok.AllArgsConstructor;
public class Main {
public static void main(String[] args) {
Food food = new Food(FoodType.RICE);
switch (food.foodType){
case RICE:
System.out.println("Souder");
break;
case BREAD:
System.out.println("C'est du pain");
break;
default:
System.out.println("Autre");
break;
}
}
}
@AllArgsConstructor
class Food {
FoodType foodType;
}
Du côté principal, enum (FoodType) est ramifié par l'instruction switch. Dans ce cas, écrivez le cas comme «RICE» au lieu de «FoodType.RICE». (Pourquoi RICE est bon sera expliqué plus tard.)
Ajoutons une énumération au code ci-dessus. Supposons que vous souhaitiez subdiviser la catégorie du riz.
RiceType
public enum RiceType {
RICE,
FriedRice,
}
Main a également changé.
Main.java
import lombok.AllArgsConstructor;
public class Main {
public static void main(String[] args) {
Food food = new Food(FoodType.RICE,RiceType.RICE);
switch (food.foodType){
case RICE:
switch (food.riceType){
case RICE:
System.out.println("Souder");
break;
case FriedRice:
System.out.println("C'est du riz frit");
break;
}
break;
case BREAD:
System.out.println("C'est du pain");
break;
default:
System.out.println("Autre");
break;
}
}
}
@AllArgsConstructor
class Food {
FoodType foodType;
RiceType riceType;
}
Le code ci-dessus se compilera.
C'est le code correct, mais je me demandais si case RICE:
et case RICE:
compileraient sans conflit dans les parties suivantes de Main:
De plus, l'importation n'est pas utilisée car tout le code est inclus.
switch (food.foodType){
case RICE:
switch (food.riceType){
case RICE:
Après examen, les noms de classe sont maintenant qualifiés au moment de la compilation, donc les noms ne semblent pas entrer en conflit. Bien qu'il soit un peu ancien, le résultat de la compilation inverse d'énumération est présenté dans la section "Implémentation du commutateur" du site suivant. http://www.ne.jp/asahi/hishidama/home/tech/java/enum.html#h2_switch
C'était un mécanisme qualifié au moment de la compilation.
Recommended Posts