我使用的是枚举而不是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));
}
我已经进行了研究,但无法正常工作。考虑过将else语句放入toString(),但似乎无法在其中放入deafult
...
您总是可以捕获引发的异常并提供自己的默认值
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");
}
两件事:
.name()
;因此,这里的覆盖是多余的;public enum MyEnum
{
FOO("my data"),
;
private final String whatever;
MyEnum(final String whatever)
{
this.whatever = whatever;
}
public String getWhatever()
{
return whatever;
}
}
有三种方法可以做到这一点:
比较每个序数值并返回相应的值。
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);
}
}
尝试以下
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"));
它为我工作