问题描述
我有一些字符串(字符串结果),用户将其插入到应用程序中而没有任何区分大小写的策略用户可以插入例如:“失败”或“失败”或“失败”和“成功”或“成功”和等等 。而且我对每个方法只有一种方法,例如:fail()、success() 并且必须调用相关方法
现在我想通过使用下面的常量(成功,失败,...)将一个字符串用于 switch-case 语句:
public final class ActionResultStatus
{
public static final String SUCCESS = "Success";
public static final String FAIL = "Fail";
public static final String REJECTED = "Rejected";
public static final String IN_PROGRESS = "InProgress";
}
String result = userClass.getResult(); //UserClass is a container class for user inputted data
switch(result)
{
case ActionResultStatus.FAIL:
fail();
case ActionResultStatus.SUCCESS :
success();
}
请注意:
1-我不想使用 toupperCase()
或 toLowerCase()
作为结果,因为我必须添加更多 case 语句。
2-我不能将我的 Constatn 类字段值更改为小写,它们必须是 pascal-case,例如:“成功”,因为它们必须完全以 pascal-case 模式持久存在于 DB 上
3-我认为我不能在这种情况下使用 equalIgnoreCase()
方法,因为这不是 if 语句。
谢谢你。
解决方法
将逻辑分开一点。首先将您的状态变成具有查找功能的 Enum 以查找枚举:
public enum ActionResultStatus {
SUCCESS("Success"),FAIL("Fail"),REJECTED("Rejected"),IN_PROGESS("InProgress"),UNKNOWN("Unknown");
private String outputStr;
private ActionResultStatus(String output) {
outputStr = output;
}
public static ActionResultStatus findStatus(String input) {
for (ActionResultStatus status : values()) {
if (input.equalsIgnoreCase(status.outputStr)) {
return status;
}
}
return UNKNOWN;
}
public String toString() {
return outputStr;
}
}
然后你的处理逻辑变成这样:
ActionResultStatus status = ActionResultStatus.findStatus(userClass.getResult());
switch (status) {
case FAIL: fail(); break;
case SUCCESS: success(); break;
default: break;
}