在这种情况下,我可以避免多个if-else语句吗?

Paw*_*wan 2 java

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

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

}
Run Code Online (Sandbox Code Playgroud)

我想把Key Values放在Map中,并根据String检索它,但是不想创建一个Map我猜哪个会占用内存

Ben*_*aum 8

假设Java 7:

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

更一般地说,你应该使用枚举而不是字符串来做这种事情.这是一个完美的契合.此外,它也适用于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;
     }
 }
Run Code Online (Sandbox Code Playgroud)

它们周围没有引号,它们是枚举值,这种方法还可以减轻因输入错误而导致的错误.最大的好处是概念性的,getLoggerLevel现在接受一个SeverityLevel而不是一个字符串.

  • @ ChrisJester-Young完全正确.我认为Java 6兼容性并不是在这里使用ENUM(而不是字符串)的更强有力的论据.枚举是为这类事物而设计的.概念上记录器级别不是字符串,它们是记录器级别:)(另外,Brian说的话) (2认同)