什么是最好的方法来使用存储在Enum字符串字面量的值? 例如:

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

然后我就可以用《风尚》了。将其字符串表示形式返回为Mode1。而不必一直调用Mode.mode1.toString()。


当前回答

我发现这个更容易防止输入错误:

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

    String str;

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

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

然而,当你需要在log/println上使用String时,或者当java自动编译toString()方法时,这可能会起作用,但在这样的代码行中->

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

相反,如上所述,你仍然需要扩展枚举,并在这些情况下使用.name():

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

其他回答

使用mode1.name()或String.valueOf(mode .mode1)

mode1.name()或String.valueOf(mode1)。恐怕没有比这更好的了

此方法适用于任何枚举:

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();
    }
}

你可以简单地使用:

""+ Modes.mode1

经过多次尝试,我终于想出了这个解决办法

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