Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java枚举:返回字符串以外的值_Java_Enums - Fatal编程技术网

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。当我把它转换成枚举时,我没有考虑改变它周围的一些代码。谢谢你的建议!