Работа с константами в Java: как записать имя, данное им? - PullRequest
0 голосов
/ 06 ноября 2018

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

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.

1 Ответ

0 голосов
/ 06 ноября 2018

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

enum USER_ACTIONS { ACTION_USER_WANTS_TO_DO_A, ACTION_USER_WANTS_TO_DO_B };

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

1) они сгруппированы в enum

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

3) да

...