Перечисление Java: Возвращаемое значение, отличное от String - PullRequest
0 голосов
/ 07 марта 2012

Я нигде не могу найти ответ на этот вопрос, поэтому надеюсь, что кто-нибудь может мне помочь.Я ожидаю, что то, что я спрашиваю, невозможно, но я хотел подтвердить.Во-первых, пример перечисления ...

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 ]

8 голосов
/ 07 марта 2012

Вы имеете в виду, как это?

public String getStatusMessage(StatusCode code) {
    int status = code.getStatusCode();
    String message = ...do stuff to get message :)
    return message;
}
1 голос
/ 07 марта 2012

К счастью для вас, EnumMap существует только для этой ситуации.

    private static final Map<StatusCode, String> mapMessage = 
                         new EnumMap<>(StatusCode.class);
    mapMessage.put(SUCCESS, "Success.");
    ...

Вам даже не нужен метод getStatusMessage, просто позвоните map.getMessage(SUCCESS).

Однако, возможно, вам лучше добавить поле String message в StatusMessage и вызвать конструкторы, такие как SUCCESS(0, "Success"), а затем добавить получатель для сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...