我无法在任何地方找到这个问题的答案,所以我希望有人可以帮助我。我期待我所要求的是不可能的,但我想确认一下。首先,一个枚举示例......
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)
?
我认为第二种方式看起来更清晰,并且会使我的代码更具可读性。有任何想法吗?任何帮助深表感谢。提前谢谢!
答案 0 :(得分:8)
你的意思是这样吗?
public String getStatusMessage(StatusCode code) {
int status = code.getStatusCode();
String message = ...do stuff to get message :)
return message;
}
答案 1 :(得分:1)
幸运的是,EnumMap仅适用于那种情况。
private static final Map<StatusCode, String> mapMessage =
new EnumMap<>(StatusCode.class);
mapMessage.put(SUCCESS, "Success.");
...
您甚至不需要方法getStatusMessage
,只需拨打map.getMessage(SUCCESS)
。
但是,最好在StatusMessage中添加String message
字段并调用SUCCESS(0, "Success")
之类的构造函数,然后为消息添加getter。