Java枚举:返回String以外的值

时间:2012-03-07 15:57:12

标签: java enums

我无法在任何地方找到这个问题的答案,所以我希望有人可以帮助我。我期待我所要求的是不可能的,但我想确认一下。首先,一个枚举示例......

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)

我认为第二种方式看起来更清晰,并且会使我的代码更具可读性。有任何想法吗?任何帮助深表感谢。提前谢谢!

2 个答案:

答案 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。