我需要通过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
对这种用例有用吗?如果是,请告诉我原因?
答案 0 :(得分:1)
根据您与int
关联的enum
值,我会向{{1}添加ErrorCode
s静态数组或静态Map<Integer,ErrorCode>
使用它来代码方法在消息中进行查找。在您的情况下,数组更合适,因为您的值enum
和1
很小。我还会更改签名以返回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;
}