[JAVA] Obtenez Enum en retirant du contenu

Voici ce que vous pouvez faire si vous souhaitez récupérer la valeur du contenu d'Enum.

◆ Méthode 1 - Créer une méthode d'acquisition dans la classe Enum

__Enum classe __ Par exemple, créez une classe Enum avec une valeur de code et un nom dans une variable membre.

SolarSystem.java


import java.util.Arrays;


public enum SolarSystem {

    MERCURY("S01", "Mercure"),
    VENUS("S02", "Vénus"),
    EARTH("S03", "Terre"),
    MARS("S04", "Mars"),
    JUPITER("S05", "Jupiter"),
    SATURN("S06", "Saturne"),
    URANUS("S07", "Uranus"),
    NEPTUNE("S08", "Neptune");

    /**Valeur de code*/
    private String code;

    /**Nom japonais*/
    private String jpName;


    SolarSystem(String code, String jpName) {
        this.code = code;
        this.jpName = jpName;
    }


    /**
     * @valeur du code de retour
     */
    public String getCode() {
        return code;
    }


    /**
     * @retourner le nom japonais
     */
    public String getJpName() {
        return jpName;
    }


    /**
     *Obtenir Enum à partir du nom japonais (en utilisant pour la phrase)
     *
     * @param code
     * @return
     */
    public static SolarSystem getByCode(String code) {
        for (SolarSystem solorSystem : SolarSystem.values()) {
            if (solorSystem.getCode().equals(code)) {
                return solorSystem;
            }
        }
        return null;
    }


    /**
     *Obtenir Enum à partir du nom japonais (en utilisant le flux)
     *
     * @param code
     * @return
     */
    public static SolarSystem getByCode2(String code) {
        return Arrays.stream(SolarSystem.values())
                .filter(data -> data.getCode().equals(code))
                .findFirst()
                .orElse(null);
    }
}

La méthode getByCode est le processus d'exécution de l'extraction inverse. (Le même processus est effectué simplement en réécrivant la méthode getByCode2 avec stream.)

Exemple d'utilisation

public static void main(String args[]) {

    SolarSystem object = SolarSystem.getByCode("S03");     // object: "EARTH"
    SolarSystem object2 = SolarSystem.getByCode2("S05");   // object2: "JUPITER"
}

◆ Méthode 2 - Créez un utilitaire d'extraction inversée.

Vous pouvez obtenir ce que vous voulez avec l'implémentation ci-dessus, mais il n'est pas réaliste de l'implémenter une par une lorsqu'il y a plusieurs classes Enum que vous souhaitez inverser. Par conséquent, au lieu de l'implémenter individuellement, nous allons permettre de l'obtenir sous forme d'utilitaire.

__ Créer une interface __ Tout d'abord, créez une interface qui rend la classe cible Enum implémentée.

CodeInterface.java


public interface CodeInterface {

    public String getCode();

    public String getJpName();

}

__Enum classe __ Créez un Enum qui implémente l'interface ci-dessus

SolarSystem.java


public enum SolarSystem implements CodeInterface {

    MERCURY("S01", "Mercure"),
    VENUS("S02", "Vénus"),
    EARTH("S03", "Terre"),
    MARS("S04", "Mars"),
    JUPITER("S05", "Jupiter"),
    SATURN("S06", "Saturne"),
    URANUS("S07", "Uranus"),
    NEPTUNE("S08", "Neptune");


    /**Valeur de code*/
    private String code;

    /**Nom japonais*/
    private String jpName;


    SolarSystem(String code, String jpName) {
        this.code = code;
        this.jpName = jpName;
    }


    /**
     * @valeur du code de retour
     */
    @Override
    public String getCode() {
        return code;
    }


    /**
     * @retourner le nom japonais
     */
    @Override
    public String getJpName() {
        return jpName;
    }
}

__ Méthode de classe utilitaire __ Créez une méthode statique qui exécute le traitement de recherche inversée.

EnumUtils.java


import java.util.Arrays;

public class EnumUtils {


    /**
     *À partir de l'énumération spécifiée dans le premier argument, celui qui correspond à la valeur de code du deuxième argument est acquis.
     *
     * @param target Classe d'énumération que vous voulez obtenir
     * @code de paramètre Valeur de code à rechercher
     * @param <E>Classe Enum qui implémente CodeInterface
     * @return
     */
    public static <E extends Enum & CodeInterface> E valueOf(Class<E> target, String code) {

        return Arrays.stream(target.getEnumConstants())
                .filter(data -> data.getCode().equals(code))
                .findFirst()
                .orElse(null);
    }
}

Exemple d'utilisation

python


public static void main(String args[]) {

    SolarSystem object = EnumUtils.valueOf(SolarSystem.class, "S02");   // object: "VENUS"
}

Recommended Posts

Obtenez Enum en retirant du contenu
Mauvaise configuration d'énumération. Pour une raison quelconque, je ne peux pas obtenir de données de la colonne spécifiée par Enum ...
Le contenu des données enregistrées par CarrierWave.
Obtenez "2-4, 7, 9" de [4, 7, 9, 2, 3]
[Java] Récupère MimeType à partir du contenu du fichier avec Apathce Tika [Kotlin]
[Inverser] Spring Security (mis à jour de temps en temps)
◆ Obtenez l'API créée par Spring Boot à partir de React
[Kotlin] Récupère le nom de l'argument du constructeur par réflexion
Obtenez le nom d'anime de ce terme en grattant
Soustraire les constantes Enum des chaînes et des valeurs en Java
[Rails] Comment obtenir le contenu des paramètres forts