【发布时间】:2015-03-27 11:09:04
【问题描述】:
我有一个枚举,它根据枚举类型评估字符串是否有效。使用开关执行验证。默认操作是这样的:
default: return false;.
一位程序员添加了一个新类型并忘记更新isValid(..),导致每次评估答案时对isValid(..) 的调用都返回false。
你认为处理它的正确方法是什么?
public enum AnswerType {
TEXT("string"),
INT("integer"),
FLOAT("float");
final String type;
AnswerType(final String type) {
this.type = type;
}
/**
* Checks whether the given answer is valid for this answer type.
* @param answer The provided answer.
* @return true if the answer is valid; false otherwise.
*/
public boolean isValid(final String answer) {
switch (this) {
case TEXT:
return !StringUtils.isEmpty(answer);
case INT:
return NumberUtils.isDigits(answer);
case FLOAT:
return NumberUtils.isNumber(answer);
default:
return false; // Not sure this is best practise.
}
}
}
【问题讨论】:
-
如果只能误打到
default这种情况,抛出异常。你可以添加一个单元测试来检查没有遗漏任何值。 -
理想情况下,摆脱 switch 语句 - 在
AnswerType中有一个抽象方法并让每个枚举值覆盖它... -
合理。您更喜欢
InternalError、NotImplementedException还是其他?
标签: java oop enums switch-statement