Java枚举:返回字符串以外的值
我在任何地方都找不到这个问题的答案,所以我希望有人能帮助我。我希望我所问的是不可能的,但我想确认一下。首先,一个枚举示例Java枚举:返回字符串以外的值,java,enums,Java,Enums,我在任何地方都找不到这个问题的答案,所以我希望有人能帮助我。我希望我所问的是不可能的,但我想确认一下。首先,一个枚举示例 public enum StatusCode { SUCCESS(0), GENERAL_ERROR(999), CONNECTION_TIMEOUT_ERROR(1337); private int statusCode; private StatusCode(int statusCode) { this.statusCode
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(int statusCode){
//包含状态消息的映射
//键状态代码的返回字符串
}
在本例中,调用此方法的语法是getStatusMessage(StatusCode.SUCCESS.getStatusCode())
有没有办法将其缩短为getStatusMessage(StatusCode.SUCCESS)
我认为第二种方法看起来更干净,并且会使我的代码更具可读性。有什么想法吗?非常感谢您的帮助。提前谢谢 你是说像这样
public String getStatusMessage(StatusCode code) {
int status = code.getStatusCode();
String message = ...do stuff to get message :)
return message;
}
幸运的是,EnumMap正是针对这种情况而存在的
private static final Map<StatusCode, String> mapMessage =
new EnumMap<>(StatusCode.class);
mapMessage.put(SUCCESS, "Success.");
...
private静态最终映射消息=
新的枚举映射(StatusCode.class);
mapMessage.put(SUCCESS,“SUCCESS.”);
...
您甚至不需要方法getStatusMessage
,只需调用map.getMessage(SUCCESS)
但是,您最好在StatusMessage中添加一个
字符串消息
字段,并调用构造函数,如SUCCESS(0,“SUCCESS”)
,然后为消息添加一个getter 为什么您不能只使用公共字符串getStatusMessage(StatusCode status)
?为什么您不想使用映射
?您不想使用公共字符串getStatusMessage(StatusCode StatusCode)
有什么原因吗?我只是想作为一个例子。例如,我可能还想使用一个setter,它接受int statusCode
。同样的问题,我将不得不使用StatusCode.SUCCESS.getStatusCode()
Hmm,我应该想到:)StatusCode最初是一组静态int。当我把它转换成枚举时,我没有考虑改变它周围的一些代码。谢谢你的建议!