[英]Can I avoid multiple if-else statements in this case?
处理这段代码的更好方法是什么
我有一个如下所示的方法,它将接受一个参数i String并返回一个int值
下面的代码工作正常。
public static int getLoggerLevel(String level)
{
int loglevel = 3;
if (level.equals("INFO")) {
loglevel = 3;
}
else if (level.equals("ERROR")) {
loglevel = 4;
} else if (level.equals("FATAL")) {
loglevel = 5;
}
return loglevel;
}
我想把Key Values放在Map中,并根据String检索它,但是不想创建一个Map我猜哪个会占用内存
假设Java 7:
public static int getLoggerLevel(String level)
{
switch(level){
case "ERROR": return 4;
case "FATAL": return 5;
case "INFO":
default: return 3;
}
}
更一般地说,你应该使用枚举而不是字符串来做这种事情。 这是一个完美的契合。 此外,它也适用于Java 6。
以下是使用枚举的替代解决方案:
public enum SeverityLevel {
ERROR, FATAL, INFO
}
public static int getLoggerLevel(SeverityLevel level)
{
switch(level){
case ERROR: return 4;
case FATAL: return 5;
case INFO:
default: return 3;
}
}
它们周围没有引号,它们是枚举值,这种方法还可以减轻因输入错误而导致的错误。 最大的好处是概念, getLoggerLevel
现在接受SeverityLevel
而不是字符串。
一个地图可以工作,几乎不会消耗任何内存,特别是如果适当的范围,以便它只是创建一次。
使用Switch-case简单易读和理解。
public static int getLoggerLevel(String level)
{
switch(level){
case "ERROR": return 4;
case "FATAL": return 5;
case "INFO":
default: return 3;
}
}
此外,在您的代码中,您可以避免第一个if块。 一旦你找到了正确的匹配..使用返回那里将避免检查更多的代码。 这将使您的代码如下
public static int getLoggerLevel(String level)
{
int loglevel = 3;
if (level.equals("ERROR")) {
return 4;
} else if (level.equals("FATAL")) {
return 5;
}
return loglevel;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.