[JAVA] switch et EnumMap

switch

Le commutateur peut prendre non seulement des valeurs de type byte, short, int et des valeurs de type String, mais également des types d'énumération comme expressions, ce qui est pratique lorsque vous souhaitez créer une branche conditionnelle rapide.

Cependant, lorsque cette affirmation devient féroce ...

Énumération DayOfWeek


enum DayOfWeek {
    SUNDAY    ("dimanche"),
    MONDAY    ("Lundi"),
    TUESDAY   ("Mardi"),
    WEDNESDAY ("Mercredi"),
    THURSDAY  ("Jeudi"),
    FRIDAY    ("Vendredi"),
    SATURDAY  ("samedi");

    private String name;

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

Classe de personne


class Person {
    private DayOfWeek dayOfWeek;
    private String lyrics;

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

    //Méthode statique pour créer une instance
    static Person todayIs(DayOfWeek dayOfWeek) {
        return new Person(dayOfWeek).doSometing();
    }
    
    //Méthode pour régler le jour
    Person setDayOfWeek(DayOfWeek dayOfWeek) {
        Objects.requireNonNull(dayOfWeek, "rentrer chez soi");
        this.dayOfWeek = dayOfWeek;
        return this;
    }

    //Méthode pour faire quelque chose
    Person doSometing() {
        lyrics = dayOfWeek.getName();
        switch (dayOfWeek) {
            case SUNDAY:
                lyrics += "Aller au marché";
                break;
            case MONDAY:
                lyrics += "Frappez le bain";
                break;
            case TUESDAY:
                lyrics += "Entrez dans le bain";
                break;
            case WEDNESDAY:
                lyrics += "Mes amis viennent";
                break;
            case THURSDAY:
                lyrics += "Envoyé";
                break;
            case FRIDAY:
                lyrics += "Sans filetage";
                break;
            case SATURDAY:
                lyrics += "Parle juste";
                break;
        }
        return this;
    }

    //Méthode de jeu
    Person gambling(int amount) {
        lyrics = dayOfWeek.getName();
        switch (dayOfWeek) {
            case SUNDAY:
            case TUESDAY:
            case THURSDAY:
            case FRIDAY:
            case SATURDAY:
                lyrics += "À" + amount + "Perdre";
                break;
            case MONDAY:
            case WEDNESDAY:
                lyrics += "À" + amount + "Gagnez un million";
                break;
        }
        return this;
    }

    //Méthode Tuller
    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;
    }

    //Méthode de chant
    Person sing() {
        System.out.println(lyrics);
        lyrics = "";
        return this;
    }
}

De cette façon, vous tomberez malade. Il existe également un risque de chute inattendue en raison de l'omission de la description de «rupture».

Exemple d'utilisation de la classe Person


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

production


Prenez le bain le lundi
Mardi, je suis dans le bain Turya Turya Turya
Perdre 1 million jeudi, hein?
Samedi est juste en train de bavarder avec Turya

EnumMap

Il existe un EnumMap qui peut gérer les données en les associant à une énumération. Si vous réécrivez en utilisant ceci,

Classe de personne (correction)


class Person {
    ... //Omettre du champ à la méthode pour définir le jour

    //Méthode pour faire quelque chose
    Person doSometing() {
        lyrics = dayOfWeek.getName() + SOMETHING_MAP.get(dayOfWeek);
        return this;
    }

    //Méthode de jeu
    Person gambling(int amount) {
        lyrics = dayOfWeek.getName() + "À" + amount + "Dix mille" + GAMBLING_MAP.get(dayOfWeek);
        return this;
    }

    //Méthode Tuller
    Person turya() {
        lyrics += TURYA_MAP.get(dayOfWeek);
        return this;
    }

    //Méthode de chant
    Person sing() {
        System.out.println(lyrics);
        lyrics = "";
        return this;
    }

    // EnumMap

    /**quelque chose*/
    private static final EnumMap<DayOfWeek, String> SOMETHING_MAP =
        new EnumMap<>(DayOfWeek.class) {{
            put(SUNDAY, "Aller au marché");
            put(MONDAY, "Frappez le bain");
            put(TUESDAY, "Entrez dans le bain");
            put(WEDNESDAY, "Mes amis viennent");
            put(THURSDAY, "Envoyé");
            put(FRIDAY, "Sans filetage");
            put(SATURDAY, "Parle juste");
        }};

    /**jeux d'argent*/
    private static final EnumMap<DayOfWeek, String> GAMBLING_MAP =
        new EnumMap<>(DayOfWeek.class) {{
            final String WIN = "Victoires";
            final String LOSE = "Perdre";
            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");
        }};
}

Pour le moment, ça devrait être plus facile à gérer ...

Pas assez bon! Je ne sais pas comment l'utiliser, mais si ce sont des données qui sont directement liées à l'énumérateur, elles sont définies directement dans l'énumérateur, sinon elles sont utilisées comme utiliser EnumMap dans chaque classe [^ 1]?

[^ 1]: Cette fois, en supposant ce dernier (en supposant que l'énumération DayOfWeek est réutilisée dans d'autres classes), nous n'avons associé aucune donnée autre que le nom du jour à l'énumération.

Recommended Posts

switch et EnumMap
Basculer entre JDK 7 et JDK 8
Instructions Java if et switch
Mettre à niveau et changer de version de Ruby sous Windows 10
instruction switch
== et égal
Basculez entre GUI et CUI sur CentOS6.
Changer de beans avec les expressions canoniques @ConditionalOnExpression et SpEL
Instruction de commutation Java et pause, Kotlin lorsque l'expression ...
Installez plusieurs Javas et basculez entre eux sur Ubuntu