Pat*_*tan 0 java if-statement java-ee
我有以下课程.
public enum EnumService
{
ONE, TWO, THREE, FOUR,.............HUNDRED;
//Values till HUNDRED
public static EnumService returnMockService(String request)
{
//some string match
if(request.matches("/abc*")){
return ONE;
}
//some other string is match
else if(request.matches("/bcd*"))
return TWO;
else if(request.matches("/decf*"))
return THREE;
//many else if conditions
else if(request.matches("/wxyz*"))
return HUNDRED;
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
代码不是更多if else语句的标准.
我想在上面的方法中最小化if调用次数,同时将返回类型保持为EnumService
任何更好的选择来做到这一点.
如果有人可以帮助我使它干净,那将是很棒的.
第一:else如果你没有必要return.
第二:如果你在枚举中使用这个字符串作为参数,你可以优化它很多:
public enum EnumService
{
ONE("abc*"),
// etc
private static final Map<Pattern, EnumService> MAPPING
= new HashMap<>();
static {
for (final EnumService svc: values())
MAPPING.put(svc.pattern, svc);
}
private final Pattern pattern;
EnumService(final String s)
{
pattern = Pattern.compile(s);
}
public static EnumService returnMockService(String request)
{
for (final Map.Entry<Pattern, EnumService> entry: MAPPING.entrySet())
if (entry.getKey().matcher(request).matches())
return entry.getValue();
return null;
}
}
Run Code Online (Sandbox Code Playgroud)