[JAVA] Holen Sie sich Enum, indem Sie sich vom Inhalt zurückziehen

Folgendes können Sie tun, wenn Sie den Wert aus dem Inhalt von Enum zurückerhalten möchten.

◆ Methode 1 - Erstellen Sie eine Methode zur Erfassung in der Enum-Klasse

__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"
}

◆ Methode 2 - Erstellen Sie ein Reverse Pull-Dienstprogramm.

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

Holen Sie sich Enum, indem Sie sich vom Inhalt zurückziehen
Enum Fehlkonfiguration. Aus irgendeinem Grund kann ich keine Daten aus der von Enum angegebenen Spalte abrufen ...
Der Inhalt der von CarrierWave gespeicherten Daten.
Holen Sie sich "2-4, 7, 9" aus [4, 7, 9, 2, 3]
[Java] Holen Sie sich MimeType aus dem Inhalt der Datei mit Apathce Tika [Kotlin]
[Reverse] Spring Security (von Zeit zu Zeit aktualisiert)
◆ Rufen Sie die von Spring Boot erstellte API von React ab
[Kotlin] Ermittelt den Argumentnamen des Konstruktors durch Reflektion
Holen Sie sich den Anime-Namen für diesen Begriff durch Scraping
Subtrahieren Sie Enum-Konstanten von Zeichenfolgen und Werten in Java zurück
[Rails] So erhalten Sie den Inhalt starker Parameter