Работа с константами в Java: как записать имя, данное им?

1

Допустим, у нас есть один класс, который выглядит так:

public class UserAction {

    static final int ACTION_USER_WANTS_TO_DO_A = 1001;
    static final int ACTION_USER_WANTS_TO_DO_B = 1002;
    // ...

    // 'sub-grouping'
    static final int[] ALL_ACTIONS_ALLOWED_IN_STATE_X = {
        ACTION_USER_WANTS_TO_DO_A,
        ACTION_USER_WANTS_TO_DO_D,
        ACTION_USER_WANTS_TO_DO_Q,
        // ... 
    }

}

... и другой класс, который выглядит так:

public class Model {

    public void onActionableEvent(int action) {

        // check for state mismatch by iterating over sub-groups
        // if (fail) {return;}, if pass:

        Log.i("XXX","processing: " + action); // <----- this is the problem.

        switch (action) {
            case: .ACTION_USER_WANTS_TO_DO_A: {
                //
                break;
            }
            case: .ACTION_USER_WANTS_TO_DO_B: {
                //
                break;
            }
        }
    }

}

У меня проблемы с записью действительного имени действий вместо необработанного int... без выполнения целой связки неэффективного кода - например. регистрация необработанных строк в каждом блоке отдельно, с использованием Hashmap, где рефакторинг имен станет громоздким.

Мой вопрос: какую структуру данных можно использовать, чтобы:

1) Разрешить 'UserActions' быть подгруппированными, как они есть в классе UserAction - таким образом, что подгруппа может быть перебрана. (Это исключает Enum, например).

2) Будет ли отображаться фактическое имя действия в журнале (например,.toString()) вместо того, чтобы просто показывать фактическое значение int (число)? (кажется, исключаю int... это то, что я использую).

3) Может использоваться статически, как в примере, без необходимости создания экземпляра UserAction.

Теги:
static
int
naming

1 ответ

1
Лучший ответ

Я бы сказал, что enum - это то, что вам нужно. Что-то вроде этого:

enum USER_ACTIONS { ACTION_USER_WANTS_TO_DO_A, ACTION_USER_WANTS_TO_DO_B };

И пытаюсь ответить на ваши 3 вопроса:

1) они сгруппированы в перечислении

2) в журнале вы получите обработку: ACTION_USER_WANTS_TO_DO_A

3) да

Ещё вопросы

Сообщество Overcoder
Наверх
Меню