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与存储在Enum.Passing 中的代码有关的消息。传递“1”应该返回字符串“Some long String here”。实现此功能的最佳方法是什么?

public static String lookUpMessageFromCode(int code){


}

PS:这个类 EnumMap对这种用例有用吗?如果是,请告诉我为什么?

4

3 回答 3

1

根据int您与. enum_ ErrorCode_ 在您的情况下,数组更合适,因为您有值并且很小。我还将签名更改为 return 。Map<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

我会简单地遍历您的 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;
}
于 2013-03-16T08:45:11.733 回答
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 回答