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() .

1voto

ItzikH Punkte 21

Ich habe herausgefunden, dass dies einfacher ist, um Tippfehler zu vermeiden:

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

    String str;

    Modes(){
        this.str = super.name();
    }

    @Override
    @NonNull
    public String toString() {
        return str;
    }

jedoch - dies kann funktionieren, wenn Sie einen String auf einem log/println verwenden müssen oder wenn Java die toString()-Methode automatisch kompiliert, aber auf eine Codezeile wie diese ->

// sample method that require (string,value)
intent.putExtra(Modes.mode1 ,shareElement.getMode()); // java error
// first argument enum does not return value

stattdessen müssen Sie, wie oben erwähnt, die Aufzählung erweitern und die .name() in Fällen wie diesem:

intent.putExtra(Modes.mode1.name() ,shareElement.getMode());

1voto

miriam Punkte 91

Verwenden. mode1.name() o String.valueOf(Modes.mode1)

1 Stimmen

Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, damit andere daraus lernen können

0voto

Basheer AL-MOMANI Punkte 13273

Nach vielen Versuchen bin ich auf diese Lösung gekommen

public static enum Operation {

    Addition, Subtraction, Multiplication, Division,;

    public String getUserFriendlyString() {
        if (this==Addition) {
            return " + ";
        } else if (this==Subtraction) {
            return " - ";
        } else if (this==Multiplication) {
            return " * ";
        } else if (this==Division) {
            return " / ";
        }
        return "undefined";
       }
}

0voto

Kamil Naja Punkte 5687

Sie können dies versuchen:

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

    public String toString(){
        switch(this) {
            case some-really-long-string:
                return "some-really-long-string";
            case mode2:
                return "mode2";
            default: return "undefined";
        }
    }

}

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