[JAVA] Gibt es keinen Namenskonflikt, wenn enum in der switch-Anweisung denselben Namen hat?

Einführung

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.

Wenn es eine Aufzählung gibt

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

Wenn es zwei Aufzählungen gibt

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

Warum die Namen nicht in Konflikt stehen

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: 

Zum Zeitpunkt der Kompilierung qualifiziert

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

Zusammenfassung

Es war ein Mechanismus, der zur Kompilierungszeit qualifiziert wurde.

Recommended Posts

Gibt es keinen Namenskonflikt, wenn enum in der switch-Anweisung denselben Namen hat?
Java learning_Behavior, wenn ein Feld mit demselben Namen und eine Methode mit demselben Namen in zwei Klassen in einer Vererbungsbeziehung vorhanden sind
So verweisen Sie auf eine Spalte, wenn Sie die Spaltennamensmethode in ActiveRecord überschreiben
[Java] Wenn Sie eine Zeichenfolge in die switch-Anweisung einfügen, müssen Sie sie zu einem konstanten Ausdruck machen
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
wsimport-Fehlerbehandlung (Eine Klasse / Schnittstelle mit dem gleichen Namen "xxx" wird bereits verwendet)
[Kopfpanik] Priorität, wenn Variablen / Methoden mit demselben Namen in geerbten Klassen verwendet werden
So fügen Sie dieselben Indizes in ein verschachteltes Array ein
Ich war verwirrt, weil es eine Aufteilung im Array gab