2012-03-07 9 views
0

どこかでこの質問に対する回答を見つけることができないので、誰かが私を助けてくれることを望んでいます。私が求めていることは不可能だと思っていますが、確認したいと思いました。あなたが見ることができるようにまず、列挙型の例...Javaのenum:String以外の戻り値

public enum StatusCode { 

    SUCCESS(0), GENERAL_ERROR(999), CONNECTION_TIMEOUT_ERROR(1337); 

    private int statusCode; 

    private StatusCode(int statusCode) { 
     this.statusCode = statusCode; 
    } 

    public int getStatusCode() { 
     return statusCode; 
    } 
} 

、私は特定のステータスコードを強制的にこの列挙を使用しています。私の質問はこれです:私はStatusCode.SUCCESSを参照し、それに関連付けられているint値を返すことができる方法はありますか?私がやりたいかについてあまり詳細に入るのではなく、この例を取る:この例では

public String getStatusMessage(int statusCode) { 
    // Map<Integer, String> that contains status messages 
    // return String for key statusCode 
} 

は、このメソッドを呼び出すための構文はgetStatusMessage(StatusCode.SUCCESS.getStatusCode())です。

これを短縮する方法はgetStatusMessage(StatusCode.SUCCESS)ですか?

私は第2の方法がはるかにクリーンに見え、私のコードをはるかに読みやすくすると思います。何か案は?どんな助けも大歓迎です。前もって感謝します!

+2

「public String getStatusMessage(StatusCode status)」を使用できないのはなぜですか? –

+0

'Map 'を代わりに使ってみませんか? –

+0

'public String getStatusMessage(StatusCode statusCode)'を使用したくない理由はありますか? – Patrick

答えて

8

このような意味ですか?

public String getStatusMessage(StatusCode code) { 
    int status = code.getStatusCode(); 
    String message = ...do stuff to get message :) 
    return message; 
} 
+0

うーん、私はこれを考えていたはずです:) StatusCodeはもともとは静的なintのセットです。列挙型に変換すると、そのコードの一部を変更することは考えられませんでした。提案していただきありがとうございます! – ggrigery

1

幸運なことに、EnumMapはその状況のた​​めだけに存在します。

private static final Map<StatusCode, String> mapMessage = 
         new EnumMap<>(StatusCode.class); 
    mapMessage.put(SUCCESS, "Success."); 
    ... 

あなたも、ちょうどmap.getMessage(SUCCESS)を呼び出し、メソッドgetStatusMessageは必要ありません。

String messageフィールドをStatusMessage内に追加し、SUCCESS(0, "Success")のようなコンストラクタを呼び出してから、メッセージのゲッタを追加するほうがよい場合があります。

+0

提案していただきありがとうございます。 – ggrigery

関連する問題