[JAVA] Schalter und EnumMap

switch

Der Switch kann nicht nur Byte-, Short-, Int-Typ- und String-Typwerte, sondern auch Aufzählungstypen als Ausdrücke verwenden. Dies ist praktisch, wenn Sie eine schnelle bedingte Verzweigung erstellen möchten.

Wenn diese Behauptung jedoch heftig wird ...

DayOfWeek-Aufzählung


enum DayOfWeek {
    SUNDAY    ("Sonntag"),
    MONDAY    ("Montag"),
    TUESDAY   ("Dienstag"),
    WEDNESDAY ("Mittwoch"),
    THURSDAY  ("Donnerstag"),
    FRIDAY    ("Freitag"),
    SATURDAY  ("Samstag");

    private String name;

    private DayOfWeek(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
};

Personenklasse


class Person {
    private DayOfWeek dayOfWeek;
    private String lyrics;

    private Person(DayOfWeek dayOfWeek) {
        setDayOfWeek(dayOfWeek);
    }

    //Statische Methode zum Erstellen einer Instanz
    static Person todayIs(DayOfWeek dayOfWeek) {
        return new Person(dayOfWeek).doSometing();
    }
    
    //Methode zum Einstellen des Tages
    Person setDayOfWeek(DayOfWeek dayOfWeek) {
        Objects.requireNonNull(dayOfWeek, "Nach Hause gehen");
        this.dayOfWeek = dayOfWeek;
        return this;
    }

    //Methode, um etwas zu tun
    Person doSometing() {
        lyrics = dayOfWeek.getName();
        switch (dayOfWeek) {
            case SUNDAY:
                lyrics += "Gehe zum Markt";
                break;
            case MONDAY:
                lyrics += "Schlagen Sie das Bad";
                break;
            case TUESDAY:
                lyrics += "Betritt das Bad";
                break;
            case WEDNESDAY:
                lyrics += "Meine Freunde kommen";
                break;
            case THURSDAY:
                lyrics += "Geschickt";
                break;
            case FRIDAY:
                lyrics += "Ohne Einfädeln";
                break;
            case SATURDAY:
                lyrics += "Spricht nur";
                break;
        }
        return this;
    }

    //Spielmethode
    Person gambling(int amount) {
        lyrics = dayOfWeek.getName();
        switch (dayOfWeek) {
            case SUNDAY:
            case TUESDAY:
            case THURSDAY:
            case FRIDAY:
            case SATURDAY:
                lyrics += "Zu" + amount + "Verlieren";
                break;
            case MONDAY:
            case WEDNESDAY:
                lyrics += "Zu" + amount + "Gewinne eine Million";
                break;
        }
        return this;
    }

    //Tuller-Methode
    Person turya() {
        switch (dayOfWeek) {
            case SUNDAY:
                lyrics += "Turya";
                break;
            case MONDAY:
                lyrics += "Turya Lya";
                break;
            case TUESDAY:
                lyrics += "Turya Turya Turya";
                break;
            case WEDNESDAY:
                lyrics += "Turya Turya Turya";
                break;
            case THURSDAY:
                lyrics += ",Ah?";
                break;
            case FRIDAY:
                lyrics += "Teyuriya";
                break;
            case SATURDAY:
                lyrics += "turya";
                break;
            default:
                break;
        }
        return this;
    }

    //Gesangsmethode
    Person sing() {
        System.out.println(lyrics);
        lyrics = "";
        return this;
    }
}

Auf diese Weise werden Sie krank. Es besteht auch die Gefahr eines unerwarteten Durchfalls, da die Beschreibung von "Bruch" weggelassen wird.

Beispiel für die Verwendung der Person-Klasse


Person.todayIs(MONDAY).sing()
    .setDayOfWeek(TUESDAY).doSometing().turya().sing()
    .setDayOfWeek(THURSDAY).gambling(100).turya().sing()
    .setDayOfWeek(SATURDAY).doSometing().turya().sing();

Ausgabe


Am Montag ins Bad gehen
Am Dienstag bin ich im Bad Turya Turya Turya
Am Donnerstag 1 Million verloren, oder?
Samstag plaudert nur Turya

EnumMap

Es gibt eine EnumMap, die Daten verwalten kann, indem sie einer Aufzählung zugeordnet werden. Wenn Sie dies umschreiben,

Personenklasse (Korrektur)


class Person {
    ... //Vom Feld zur Methode weglassen, um den Tag einzustellen

    //Methode, um etwas zu tun
    Person doSometing() {
        lyrics = dayOfWeek.getName() + SOMETHING_MAP.get(dayOfWeek);
        return this;
    }

    //Spielmethode
    Person gambling(int amount) {
        lyrics = dayOfWeek.getName() + "Zu" + amount + "Zehntausend" + GAMBLING_MAP.get(dayOfWeek);
        return this;
    }

    //Tuller-Methode
    Person turya() {
        lyrics += TURYA_MAP.get(dayOfWeek);
        return this;
    }

    //Gesangsmethode
    Person sing() {
        System.out.println(lyrics);
        lyrics = "";
        return this;
    }

    // EnumMap

    /**etwas*/
    private static final EnumMap<DayOfWeek, String> SOMETHING_MAP =
        new EnumMap<>(DayOfWeek.class) {{
            put(SUNDAY, "Gehe zum Markt");
            put(MONDAY, "Schlagen Sie das Bad");
            put(TUESDAY, "Betritt das Bad");
            put(WEDNESDAY, "Meine Freunde kommen");
            put(THURSDAY, "Geschickt");
            put(FRIDAY, "Ohne Einfädeln");
            put(SATURDAY, "Spricht nur");
        }};

    /**Glücksspiel*/
    private static final EnumMap<DayOfWeek, String> GAMBLING_MAP =
        new EnumMap<>(DayOfWeek.class) {{
            final String WIN = "Gewinnt";
            final String LOSE = "Verlieren";
            put(SUNDAY, LOSE);
            put(MONDAY, WIN);
            put(TUESDAY, LOSE);
            put(WEDNESDAY, WIN);
            put(THURSDAY, LOSE);
            put(FRIDAY, LOSE);
            put(SATURDAY, LOSE);
        }};

    /**Turya*/
    private static final EnumMap<DayOfWeek, String> TURYA_MAP =
        new EnumMap<>(DayOfWeek.class) {{
            put(SUNDAY, "Turya");
            put(MONDAY, "Turya Lya");
            put(TUESDAY, "Turya Turya Turya");
            put(WEDNESDAY, "Turya Turya Turya");
            put(THURSDAY, ",Ah?");
            put(FRIDAY, "Teyuriya");
            put(SATURDAY, "turya");
        }};
}

Vorerst sollte es einfacher sein, ...

Nicht gut genug! Ich bin nicht sicher, wie ich es verwenden soll, aber wenn es Daten sind, die direkt mit dem Enumerator verknüpft sind, werden sie direkt im Enumerator definiert, andernfalls wird es wie die Verwendung von EnumMap in jeder Klasse verwendet [^ 1]?

[^ 1]: Dieses Mal haben wir unter der Annahme, dass die DayOfWeek-Aufzählung in anderen Klassen wiederverwendet wird, keine anderen Daten als den Tagesnamen mit der Aufzählung verknüpft.

Recommended Posts

Schalter und EnumMap
Wechseln Sie zwischen JDK 7 und JDK 8
Java if- und switch-Anweisungen
Aktualisieren und wechseln Sie Ruby-Versionen unter Windows 10
switch-Anweisung
== und gleich
Wechseln Sie unter CentOS6 zwischen GUI und CUI.
Wechseln Sie die Beans mit den kanonischen Ausdrücken @ConditionalOnExpression und SpEL
Java switch Anweisung und break, Kotlin beim Ausdruck ...
Installieren Sie mehrere Javas und wechseln Sie unter Ubuntu zwischen ihnen