private enum CLASS {FMAN, SOPH, JUN, SEN, GRAD, ERROR};
private CLASS stringToClass(String t){
switch(CLASS.valueOf(t))
{
case FMAN: return CLASS.FMAN;
case SOPH: return CLASS.SOPH;
case JUN: return CLASS.JUN;
case SEN: return CLASS.SEN;
case GRAD: return CLASS.GRAD;
default:
System.out.println("NOT VALID CLASS. ERROR");
return CLASS.ERROR;
}
}
所以我在这里有这段代码。在构造时,我有这个方法从给定的字符串t返回相应的值。
我的问题是,让我们说“t”最终成为“CSE”。我该如何处理并基本上返回CLASS.ERROR的值。?
这是Java 6,而不是7。
答案 0 :(得分:7)
这是一个更好的方式来写这个:
private CLASS stringToClass(String t){
try {
return CLASS.valueOf(t);
} catch (InvalidArgumentException ex) {
return CLASS.ERROR;
}
}
switch语句是多余的...它实际上会使你的代码更加脆弱'因为如果你向enum
添加新值,你必须记住更新案例列表。
我还应该在你的代码中指出一些风格暴行:
我知道我知道。这可能令人困惑。我的命名不好。但我已经在我的代码中进行了分类。
是的......好吧,把它换成别的东西。动用你的想象力。但是不要违反风格规则。
答案 1 :(得分:2)
同意StevenC的回答,但我会:
ignore
(表示忽略它的传统方式)离开这个:
private enum ClassLevel {
FMAN, SOPH, JUN, SEN, GRAD, ERROR;
static ClassLevel parseString(String t) {
try {
return valueOf(t);
} catch (InvalidArgumentException ignore) {
return ERROR;
}
}
}