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;

}

Key Values を 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;
     }
 }

それらを囲む引用符はありません。これらは列挙値です。このアプローチは、入力エラーによって引き起こされるバグも軽減します。ただし、大きなボーナスは概念的なものであり、文字列ではなく agetLoggerLevelを受け入れるようになりました。SeverityLevel

于 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 に答える