Folgendes können Sie tun, wenn Sie den Wert aus dem Inhalt von Enum zurückerhalten möchten.
__Enum Klasse __ Erstellen Sie beispielsweise eine Enum-Klasse mit einem Codewert und einem Namen in der Mitgliedsvariablen.
SolarSystem.java
import java.util.Arrays;
public enum SolarSystem {
MERCURY("S01", "Merkur"),
VENUS("S02", "Venus"),
EARTH("S03", "Erde"),
MARS("S04", "Mars"),
JUPITER("S05", "Jupiter"),
SATURN("S06", "Saturn"),
URANUS("S07", "Uranus"),
NEPTUNE("S08", "Neptun");
/**Codewert*/
private String code;
/**Japanischer Name*/
private String jpName;
SolarSystem(String code, String jpName) {
this.code = code;
this.jpName = jpName;
}
/**
* @Rückkehrcode Wert
*/
public String getCode() {
return code;
}
/**
* @japanischen Namen zurückgeben
*/
public String getJpName() {
return jpName;
}
/**
*Holen Sie sich Enum vom japanischen Namen (mit für Satz)
*
* @param code
* @return
*/
public static SolarSystem getByCode(String code) {
for (SolarSystem solorSystem : SolarSystem.values()) {
if (solorSystem.getCode().equals(code)) {
return solorSystem;
}
}
return null;
}
/**
*Holen Sie sich Enum vom japanischen Namen (mit Stream)
*
* @param code
* @return
*/
public static SolarSystem getByCode2(String code) {
return Arrays.stream(SolarSystem.values())
.filter(data -> data.getCode().equals(code))
.findFirst()
.orElse(null);
}
}
Die getByCode -Methode ist der Prozess des Durchführens des umgekehrten Pulls. (Der gleiche Vorgang wird nur durch Umschreiben der getByCode2-Methode mit stream ausgeführt.)
Beispiel der Verwendung
public static void main(String args[]) {
SolarSystem object = SolarSystem.getByCode("S03"); // object: "EARTH"
SolarSystem object2 = SolarSystem.getByCode2("S05"); // object2: "JUPITER"
}
Mit der obigen Implementierung können Sie das erreichen, was Sie möchten. Es ist jedoch nicht realistisch, sie einzeln zu implementieren, wenn mehrere Enum-Klassen vorhanden sind, die Sie umkehren möchten. Anstatt es einzeln zu implementieren, werden wir es daher ermöglichen, es in Form eines Dienstprogramms zu erhalten.
__ Schnittstelle erstellen __ Erstellen Sie zunächst eine Schnittstelle, über die die Enum-Zielklasse implementiert wird.
CodeInterface.java
public interface CodeInterface {
public String getCode();
public String getJpName();
}
__Enum Klasse __ Erstellen Sie eine Aufzählung, die die obige Schnittstelle implementiert
SolarSystem.java
public enum SolarSystem implements CodeInterface {
MERCURY("S01", "Merkur"),
VENUS("S02", "Venus"),
EARTH("S03", "Erde"),
MARS("S04", "Mars"),
JUPITER("S05", "Jupiter"),
SATURN("S06", "Saturn"),
URANUS("S07", "Uranus"),
NEPTUNE("S08", "Neptun");
/**Codewert*/
private String code;
/**Japanischer Name*/
private String jpName;
SolarSystem(String code, String jpName) {
this.code = code;
this.jpName = jpName;
}
/**
* @Rückkehrcode Wert
*/
@Override
public String getCode() {
return code;
}
/**
* @japanischen Namen zurückgeben
*/
@Override
public String getJpName() {
return jpName;
}
}
__ Utility-Klassenmethode __ Erstellen Sie eine statische Methode, die die Reverse-Lookup-Verarbeitung ausführt.
EnumUtils.java
import java.util.Arrays;
public class EnumUtils {
/**
*Aus der im ersten Argument angegebenen Aufzählung wird diejenige ermittelt, die dem Codewert des zweiten Arguments entspricht.
*
* @param target Enum-Klasse, die Sie erhalten möchten
* @Parametercode Code-Wert für die Suche
* @param <E>Enum-Klasse, die CodeInterface implementiert
* @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);
}
}
Beispiel der Verwendung
python
public static void main(String args[]) {
SolarSystem object = EnumUtils.valueOf(SolarSystem.class, "S02"); // object: "VENUS"
}
Recommended Posts