在 Java 枚举中覆盖 valueof() 和 toString()

2022-08-31 08:05:30

我的值是需要在其中包含空格的单词,但枚举的值中不能有空格,因此它们都被捆绑在一起。我想覆盖以添加这些空格,我告诉它。enumtoString()

我还希望枚举在我对添加空格的同一字符串上使用时提供正确的枚举。valueOf()

例如:

public enum RandomEnum
{
     StartHere,
     StopHere
}

对其值为 的调用返回字符串 。对同一字符串 () 的调用返回枚举值 。toString()RandomEnumStartHere"Start Here"valueof()"Start Here"StartHere

我该怎么做?


答案 1

您可以试用此代码。由于您无法重写方法,因此必须定义一个自定义方法(在下面的示例代码中),该方法返回所需的值,并将客户端更改为使用此方法。valueOfgetEnum

public enum RandomEnum {

    StartHere("Start Here"),
    StopHere("Stop Here");

    private String value;

    RandomEnum(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    @Override
    public String toString() {
        return this.getValue();
    }

    public static RandomEnum getEnum(String value) {
        for(RandomEnum v : values())
            if(v.getValue().equalsIgnoreCase(value)) return v;
        throw new IllegalArgumentException();
    }
}

答案 2

试试这个,但我不确定这是否会在任何地方工作:)

public enum MyEnum {
    A("Start There"),
    B("Start Here");

    MyEnum(String name) {
        try {
            Field fieldName = getClass().getSuperclass().getDeclaredField("name");
            fieldName.setAccessible(true);
            fieldName.set(this, name);
            fieldName.setAccessible(false);
        } catch (Exception e) {}
    }
}