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

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 ... без выполнения всей кучи неэффективного кода - например. регистрация необработанных строк в каждом блоке case отдельно с использованием Hashmap, где рефакторинг имен станет громоздким.

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

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

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

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

1
Nerdy Bunz 6 Ноя 2018 в 15:34

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) да

1
Evgeni Enchev 6 Ноя 2018 в 13:22