通过常量特定数据在枚举常量中查找

时间:2013-03-16 08:28:01

标签: java enums

我需要通过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有关该代码的Enum消息,该消息存储在{{ 1}}。传递“1”应该返回String “这里有一些长字符串”。实现此功能的最佳方法是什么?

public static String lookUpMessageFromCode(int code){


}

P.S:班级EnumMap对这种用例有用吗?如果是,请告诉我原因?

3 个答案:

答案 0 :(得分:1)

根据您与int关联的enum值,我会向{{1}添加ErrorCode s静态数组或静态Map<Integer,ErrorCode>使用它来代码方法在消息中进行查找。在您的情况下,数组更合适,因为您的值enum1很小。我还会更改签名以返回2

ErrorCode

需要该消息的呼叫者将获得如下信息:

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];
}

答案 1 :(得分:0)

我只需遍历您的Enum值并检查代码。此解决方案允许您利用现有的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));
    }

}

有一点需要注意

Enum构造函数缺少有关其参数的类型信息。

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

答案 2 :(得分:0)

这是另一种选择:

     public static String lookUpMessageFromCode(int code){
     for(ErrorCode ec:ErrorCode.values()){
         if(ec.shortCode==code)
             return ec.detailMessage;
     }
     return null;
 }