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