2

处理这段代码的更好方法是什么

我有一个如下所示的方法,它将接受一个参数 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;

}

我想把键值放在 Map 中,然后根据 String 检索它,但不想创建一个 Map 我猜这会消耗内存

4

3 回答 3

8

假设 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现在接受 aSeverityLevel而不是字符串。

于 2013-06-22T19:18:35.180 回答
0

地图可以工作并且几乎不会消耗任何内存,特别是如果适当地确定范围以便它只创建一次。

于 2013-06-22T19:19:20.857 回答
0

使用 Switch-case 易于阅读和理解。

public static int getLoggerLevel(String level)
{
    switch(level){
        case "ERROR": return 4;
        case "FATAL": return 5;
        case "INFO": 
        default: return 3;
    }
}

此外,在您的代码中,您可以避免第一个 if 块。一旦你找到正确的匹配......使用 return 那里将避免检查进一步的代码。这将使您的代码如下

public static int getLoggerLevel(String level)
{
    int loglevel = 3;
    if (level.equals("ERROR")) {
        return 4;
    } else if (level.equals("FATAL")) {
        return 5;
    }
    return loglevel;

}

于 2013-06-22T20:52:46.520 回答