Wenn in der Java-switch-Anweisung enum als Ausdruck verwendet wird, wird kein qualifizierter Name angegeben. Es war seltsam, dass die Kompilierung bestanden wurde, wenn zwei oder mehr gleiche Konstanten vorhanden waren, also habe ich sie überprüft. Zunächst müssen Sie es nicht ändern, damit Sie es so verwenden können, wie es ist, ohne sich darum kümmern zu müssen.
Angenommen, Sie haben eine solche Aufzählung.
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("Lot");
break;
case BREAD:
System.out.println("Es ist Brot");
break;
default:
System.out.println("Andere");
break;
}
}
}
@AllArgsConstructor
class Food {
FoodType foodType;
}
Auf der Hauptseite wird enum (FoodType) durch die switch-Anweisung verzweigt. In diesem Fall schreiben Sie den Fall als "RICE" anstelle von "FoodType.RICE". (Warum RICE gut ist, wird später erklärt.)
Fügen wir dem obigen Code eine Aufzählung hinzu. Angenommen, Sie möchten die Reiskategorie unterteilen.
RiceType
public enum RiceType {
RICE,
FriedRice,
}
Main hat sich ebenfalls geändert.
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("Lot");
break;
case FriedRice:
System.out.println("Es ist gebratener Reis");
break;
}
break;
case BREAD:
System.out.println("Es ist Brot");
break;
default:
System.out.println("Andere");
break;
}
}
}
@AllArgsConstructor
class Food {
FoodType foodType;
RiceType riceType;
}
Der obige Code wird kompiliert. Dies ist der richtige Code, aber ich habe mich gefragt, ob "case RICE:" und "case RICE:" in den folgenden Teilen von Main ohne Konflikte kompiliert werden können: Außerdem wird der Import nicht verwendet, da der gesamte Code enthalten ist.
switch (food.foodType){
case RICE:
switch (food.riceType){
case RICE:
Nach der Prüfung werden die Klassennamen jetzt zur Kompilierungszeit qualifiziert, sodass die Namen nicht in Konflikt zu geraten scheinen. Obwohl es ein wenig alt ist, wird das Ergebnis der umgekehrten Kompilierung von Enum im Abschnitt "Implementierung von Switch" an der folgenden Stelle vorgestellt. http://www.ne.jp/asahi/hishidama/home/tech/java/enum.html#h2_switch
Es war ein Mechanismus, der zur Kompilierungszeit qualifiziert wurde.
Recommended Posts