Voici ce que vous pouvez faire si vous souhaitez récupérer la valeur du contenu d'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"
}
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