1

intで列挙型を検索する必要があります。列挙型は次のとおりです。

    public enum ErrorCode{

    MissingReturn(1,"Some long String here"),
    InvalidArgument(2,"Another long String here");


    private final int shortCode ;

    private final String detailMessage;

    ErrorCode(shortCode ,detailMessage){
      this.shortCode = shortCode ;
      this.detailMessage= detailMessage;
    } 

    public String getDetailedMessage(){
      return this.detailMessage;
    }    

     public int getShortCode(){
      return this.shortCode ;
    }      

  }

int ここで、コードを取得し、に格納されているそのコードStringに関連するメッセージを返すルックアップ メソッドが必要です。 「1」Enumを渡すと、文字列「Some long String here」が返されます。この機能を実装する最良の方法は何ですか?

public static String lookUpMessageFromCode(int code){


}

PS: クラス EnumMapはこの種のユースケースに役立ちますか? はいの場合、理由を教えてください。

4

3 に答える 3

1

intに関連付けた値に応じて、s の静的配列またはクラスに静的をenum追加し、それを使用してコード メソッドからのメッセージでルックアップを行います。あなたの場合、値があり、小さいため、配列の方が適切です。また、署名を return に変更します。ErrorCodeMap<Integer,ErrorCode>enum12ErrorCode

private static final ErrorCode[] allErrorCodes = new ErrorCode[] {
    null, MissingReturn, InvalidArgument
};

public static ErrorCode lookUpByCode(int code) {
    // Add range checking to see if the code is valid
    return allErrorCodes[code];
}

メッセージを必要とする発信者は、次のようにメッセージを取得します。

String message = ErrorCode.lookUpByCode(myErrorCode).getDetailedMessage();
于 2013-03-16T08:35:10.440 に答える
0

別のオプションは次のとおりです。

     public static String lookUpMessageFromCode(int code){
     for(ErrorCode ec:ErrorCode.values()){
         if(ec.shortCode==code)
             return ec.detailMessage;
     }
     return null;
 }
于 2013-03-16T10:23:31.983 に答える
0

列挙型の値を繰り返し処理して、コードを確認します。Enumこのソリューションでは、管理する別のオブジェクトを作成せずに既存のものを利用できます。

public enum ErrorCode {

    MissingReturn(1, "Some long String here"), 
    InvalidArgument(2, "Another long String here");

    private final int shortCode;

    private final String detailMessage;

    ErrorCode(int shortCode, String detailMessage) {
        this.shortCode = shortCode;
        this.detailMessage = detailMessage;
    }

    public String getDetailedMessage() {
        return this.detailMessage;
    }

    public int getShortCode() {
        return this.shortCode;
    }

    public static String lookUpMessageFromCode(int code) {
        String message = null;
        for (ErrorCode errorCode : ErrorCode.values()) {
            if (errorCode.getShortCode() == code) {
                message = errorCode.getDetailedMessage();
                break;
            }
        }
        return message;
    }

    public static void main(String[] args) {
        System.out.println(ErrorCode.lookUpMessageFromCode(1));
        System.out.println(ErrorCode.lookUpMessageFromCode(2));
    }

}

注意すべき1つのこと

コンストラクターには、Enumパラメーターに関する型情報がありません。

ErrorCode(int shortCode, String detailMessage) {
    this.shortCode = shortCode;
    this.detailMessage = detailMessage;
}
于 2013-03-16T08:45:11.733 に答える