问题
myenum
中的值是需要在其中包含空格的单词,但枚举不能在其值中包含空格,因此它们全部聚集在一起。我想覆盖toString()
以在我告诉它的地方添加这些空格。
当我使用valueOf()
在我添加空格的相同字符串时,我还希望枚举能够提供正确的枚举。
例如:
public enum RandomEnum
{
StartHere,
StopHere
}
CalltoString()
onRandomEnum
,其值为StartHere
,返回string"Start Here"
。 Callvalueof()
在相同的字符串("Start Here"
)返回枚举值StartHere
。
我怎样才能做到这一点?
#1 热门回答(160 赞)
你可以试试这个代码。由于你无法覆盖valueOf
方法,因此你必须定义一个自定义方法(下面的示例代码中为getEnum
),该方法返回你需要的值并更改你的客户端以使用此方法。
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 热门回答(21 赞)
试试这个,但我不确定每个地方都会有效:)
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) {}
}
}
#3 热门回答(10 赞)
Java 8实现怎么样? (null可以替换为你的默认枚举)
public static RandomEnum getEnum(String value) {
List<RandomEnum> list = Arrays.asList(RandomEnum.values());
return list.stream().filter(m -> m.value.equals(value)).findAny().orElse(null);
}
或者你可以使用:
...findAny().orElseThrow(NotFoundException::new);