503 Stimmen

Verwendung von Enum-Werten als String-Literale

Wie lassen sich die in einer Enum gespeicherten Werte am besten als String-Literale verwenden? Zum Beispiel:

public enum Modes {
    some-really-long-string,
    mode1,
    mode2,
    mode3
}

Später könnte ich dann Mode.mode1 um seine String-Repräsentation als mode1 . Ohne ständig anrufen zu müssen Mode.mode1.toString() .

5voto

Buddy Punkte 2064

Sie können einfach verwenden:

""+ Modes.mode1

0 Stimmen

Ich bin mir nicht 100%ig sicher, aber soweit ich weiß, ist diese Besetzung nicht notwendig, oder? Die Verkettung einer leeren Zeichenfolge mit einer anderen Variablen sollte automatisch eine Konvertierung erfordern, oder gibt es Ausnahmen von dieser Regel?

1 Stimmen

Sie haben Recht, die korrekte Version sollte lauten "" + Modes.mode1 . Ich habe die Antwort korrigiert

0 Stimmen

Die Antwort von E B hat auch den Vorteil, dass sie an das Python Idiom erinnert ''.join()

5voto

lokesh Punkte 453
public enum Environment
{
    PROD("https://prod.domain.com:1088/"),
    SIT("https://sit.domain.com:2019/"),
    CIT("https://cit.domain.com:8080/"),
    DEV("https://dev.domain.com:21323/");

    private String url;

    Environment(String envUrl) {
        this.url = envUrl;
    }

    public String getUrl() {
        return url;
    }
}

String prodUrl = Environment.PROD.getUrl();

Es wird gedruckt:

https://prod.domain.com:1088/

Dieser Entwurf für enum string Konstanten funktioniert in den meisten Fällen.

0 Stimmen

Oh. Das ist genau wie bei Rust und Haskell.

0 Stimmen

Warum kommt dieses PROD zu mir zurück?

4voto

AlexR Punkte 111534

Enum ist einfach eine etwas spezielle Klasse. Enums können zusätzliche Felder speichern, Methoden implementieren usw. Zum Beispiel

public enum Modes {
    mode1('a'),
    mode2('b'),
    mode3('c'),
    ;
    char c;

    private Modes(char c) {
        this.c = c;
    }
    public char character() {
        return c;
    }
}

Jetzt können Sie sagen:

System.out.println(Modes.mode1.character())

und sehen Sie die Ausgabe: a

3voto

package com.common.test;

public  enum Days {

    monday(1,"Monday"),tuesday(2,"Tuesday"),wednesday(3,"Wednesday"),
    thrusday(4,"Thrusday"),friday(5,"Friday"),saturday(6,"Saturday"),sunday(7,"Sunday");

    private int id;
    private String desc;

    Days(int id,String desc){
        this.id=id;
        this.desc=desc;
    }

    public static String getDay(int id){

        for (Days day : Days.values()) {
            if (day.getId() == id) {
                return day.getDesc();
            }
        }
        return null;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

};

1 Stimmen

Können Sie bitte erklären, wie das Problem gelöst werden kann?

0 Stimmen

Sie können diese Aufzählung überall aufrufen, indem Sie diese Zeile verwenden: int id=1; String dayName = Days.getDay(id); , übergeben Sie hier id . es wird die Beschreibung für diese id zurückgegeben, die "Dienstag" ist

3voto

Caner Punkte 53228

Diese Methode sollte mit jeder enum :

public enum MyEnum {
    VALUE1,
    VALUE2,
    VALUE3;

    public int getValue() {
        return this.ordinal();
    }

    public static DataType forValue(int value) {
        return values()[value];
    }

    public String toString() {
        return forValue(getValue()).name();
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X