我使用enum而不是switch,但是有一个问题。在交换机中,您可以使用默认情况。但是使用枚举呢?当我提供的输入与定义的枚举不同时,我的程序崩溃了。
例如:
public enum InputChar {
X,Y,Z;
/**
* get an input character
* @return a String description of the input character
*/
@Override
public String toString()
{
String s = "";
if (this.ordinal() == 0)
s = "X";
else if (this.ordinal() == 1)
s = "Y";
else if (this.ordinal() == 2)
s = "Z";
return s;
}
}
我正在使用它:
private void checkInput(String charEntered)
{
textDoc = new textDoc (InputChar.valueOf(charEntered));
}
我已经研究过,无法让它发挥作用。考虑在toString()中添加else语句,但似乎无法将deafult
放在那里......
答案 0 :(得分:2)
两件事:
.name()
;因此,你的覆盖是多余的; public enum MyEnum
{
FOO("my data"),
;
private final String whatever;
MyEnum(final String whatever)
{
this.whatever = whatever;
}
public String getWhatever()
{
return whatever;
}
}
答案 1 :(得分:0)
您始终可以捕获抛出的异常并提供您自己的默认
InputChar c=InputChar.X;
trý {
c=InputChar.valueOf(charEntered);
} catch (IllegalArgumentException e){
System.out.println("I don't know what to do with " + charEntered+", defaulting to X");
}
答案 2 :(得分:0)
有三种方法可以做到这一点:
比较每个序数值并返回相应的值。
public enum InputChar {
X, Y, Z;
@Override
public String toString() {
if (this.ordinal() == 0) {
return "X";
} else if (this.ordinal() == 1) {
return "Y";
} else if (this.ordinal() == 2) {
return "Z";
} else {
return "";
}
}
}
打开序数值并返回相应的值。
public enum InputChar {
X, Y, Z;
@Override
public String toString() {
switch (this.ordinal()) {
case 0:
return "X";
case 1:
return "Y";
case 2:
return "Z";
default:
return "";
}
}
}
返回枚举的指定值。
public enum InputChar {
X("X"),
Y("Y"),
Z("Z");
private String value;
private InputChar(String value) {
this.value = value;
}
@Override
public String toString() {
return this.value;
}
}
通过属性快速查找枚举的最佳方法是创建查找表。
import java.util.LinkedHashMap;
import java.util.Map;
public enum InputChar {
X("X"),
Y("Y"),
Z("Z");
private static final Map<String, InputChar> lookup;
static {
lookup = new LinkedHashMap<>();
for (InputChar inChar : values()) {
lookup.put(inChar.value, inChar);
}
}
private String value;
private InputChar(String value) {
this.value = value;
}
@Override
public String toString() {
return this.value;
}
public InputChar findByValue(String value) {
return lookup.get(value);
}
}
答案 3 :(得分:0)
尝试以下
enum InputChar {
X("X"),
Y("Y"),
Z("Z"),
DEFAULT("D");
private String value;
private InputChar(String value) {
this.value = value;
}
public String getValue() {
return value;
}
@Override
public String toString() {
return this.getValue();
}
public static InputChar getEnum(String value)
{
for (InputChar v : values())
if (v.toString().equalsIgnoreCase(value))
return v;
return InputChar.DEFAULT;
}}
主要
System.out.println(InputChar.getEnum("X"));
System.out.println(InputChar.getEnum("A"));
对我有用